- 2,223
- 1,854
- CPU
- Intel I9-10900KF 3.75GHz 10x 125W
- Dissipatore
- Gigabyte Aorus Waterforce X360 ARGB
- Scheda Madre
- Asus 1200 TUF Z590-Plus Gaming ATX DDR4
- HDD
- 1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
- RAM
- DDR4 32GB 3600MHz CL18 ARGB
- GPU
- Nvidia RTX 3080 10GB DDR6
- Audio
- Integrata 7.1 HD audio
- Monitor
- LG 34GN850
- PSU
- Gigabyte P850PM
- Case
- Phanteks Enthoo Evolv X ARGB
- Periferiche
- MSI Vigor GK30, mouse Logitech
- Net
- FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
- OS
- Windows 10 64bit / OpenSUSE Tumbleweed
il mio prof di programmazione diceva sempre che nel caso non si conoscesse a prescindere il numero di elementi, la lista é sempre l'unica opzione plausibile, perché l'array puoi farlo anche di 1000 elementi, ma se poi lo usi per uno-due allochi memoria per niente, cosí come se vuoi memorizzare piú di 1000 numeri e allora non ti basta. Sinceramente la lista la vedo come l'opzione piú efficiente in termini di memoria proprio perché viene allocata dinamicamente.
@filoippo97
Allora mi trovo in disaccordo con il tuo docente, o comunque non così d'accordo.
A questo punto è d'uopo una mia spiegazione/motivazione in merito alla divergenza, visto che non siamo in politica (:D) e non è sufficiente, secondo me, non motivare la mia affermazione.
La lista non è l'unica struttura dati allocata dinamicamente, esistono anche gli array dinamici. Due esempi sono std::vector (C++) e java.utils.ArrayList (Java).
L'array viene inizializzato con un determinato numero di elementi (una decina) e poi, quando si raggiunge la dimensione allocata, viene espanso ulteriormente.
In inserimento o rimozione, la linked list è efficiente, considerando l'accesso in un tempo costante (tuttavia vi è dell'overhead dovuto al puntatore).
Le posizioni di un array sono contigue in memoria... quelle di una lista collegata molto probabilmente non lo sono. Questo ha impatti tanto sulla cache, quanto sulla pagine presenti in memoria (nel senso che gli elementi potrebbero trovarsi su più pagine di memoria, per altro anche distanti tra loro, e magari dover essere caricate in quanto non presenti nel TLB o nella MMU).
Ci sono situazioni dove è preferibile utilizzare l'una, ed altre dove è preferibile utilizzare l'altra (e le implementazioni di vector ed ArrayList ne sono una prova).
In questo caso la scelta migliore è un array allocato con calloc e poi l'utilizzo di realloc per allocare memoria aggiuntiva raddoppiando la dimensione precedente dell'array.
Ultima modifica: