vbextreme ha scritto:
Diciamo che non è obbligatorio a priori che un array sia costituito in forma fisica da una sequenza di blocchi di memoria adiacenti. Se questo accade, allora ci sono facilitazioni nel calcolo della posizione in memoria dell'elemento N-esimo, quindi un suo accesso a maggiore velocità.
Invece si,altrimenti non si parlerebbe piu di array ma di linked list.
Perchè poi simulare un array con delle linked quando lo si può creare realmente?
Il concetto di vettore è un concetto matematico, così come quello di matrice N dimensionale. Sono concetti non propri dell'informatica, bensì concetti che l'informatica ha preso in prestito (per così dire) dalla matematica.
Suvvia, non poniamoci con simili rigidità mentali; un vettore può essere presentato all'utilizzatore finale come vettore, ma può essere implementato in vari modi diversi, dipende sempre dai problemi di implementazione. Così come una linked list, può essere presentata in vari modi diversi, ma dentro è sempre una linked list, con pregi e difetti.
In relazione alla tua domanda, un vettore realizzato in modo contiguo in memoria di solito è la migliore soluzione, ma dipende tutto dal sistema hw e dalla CPU. Esistono sistemi con memoria frammentata fisicamente e quindi non contigua (memoria che sta su chip distinti e che occupa zone di indirizzamento a macchia di leopardo, tanto per fare un esempio, e CPU senza MMU), che non permetterebbero l'allocazione di vettori contigui di dimensione oltre una certa soglia. Stesso problema si potrebbe porre nel caso di un sistema (embedded ad esempio) con primitive alloc/free che alla lunga creano grande frammentazione logica dei blocchi di memoria.
E con questo, personalmente ho chiuso sull'argomento.