2014-12-19 23 views
6

Stavo leggendo un blog di recente che ha fatto un grosso problema sul fatto che i dati dell'array vengano memorizzati in modo contiguo (in particolare in Go), ma ho capito che, per definizione, i dati dell'array sono archiviati in modo contiguo. Almeno questo è ciò che tutti i miei algoritmi e strutture dati studiano mi hanno portato a credere.Gli array sono memorizzati in modo contiguo in tutte le lingue?

Quindi la mia domanda è: i dati dell'array sono memorizzati in modo contiguo in tutti i linguaggi di programmazione? E, in particolare, voglio parlare di primitive come gli interi (o nel caso di Java dove posso avere una matrice di oggetti, sono i riferimenti agli oggetti memorizzati in modo contiguo nella memoria? So che gli oggetti stessi possono essere ovunque).

+0

per Java è già presente una risposta https://stackoverflow.com/questions/10224888/java-are-1-d-arrays-always-contiguous-in-memory – DRC

+0

Per Java non esiste alcuna regola per l'archiviazione degli elementi dell'array in modo contiguo o in un ordine particolare, purché si verifichino i comportamenti specificati. I linguaggi C in genere richiedono un ordine contiguo per gli array a dimensione singola in modo da garantire la semantica del puntatore. Probabilmente esistono diversi linguaggi che utilizzano un meccanismo di tipo "ArrayList" per gli array, e gli array possono essere costruiti da più blocchi non contigui. –

+2

Molte specifiche del linguaggio considerano questo dettaglio dell'implementazione (cos'è la memoria?) E non lo garantiscono, ma di solito è il caso delle implementazioni effettive. – zch

risposta

0

di solito questo è al di sotto del livello di astrazione del linguaggio, quindi non c'è alcun obbligo esplicito a riguardo. ma qualsiasi implementazione della vita reale probabilmente lo fa (con arrotondamento alla dimensione della parola) a causa delle prestazioni. si riferisce alla memoria virtuale, naturalmente, perché il kernel può fornire uno spazio non contiguo che lo stesso programma vede contiguo

3

Dipende da ciò che si definisce come "matrice" su un linguaggio, sebbene il significato tradizionale di un array abbia fare con l'immissione di elementi contigui.

Ad esempio, in JavaScript, matrici sono in tabelle hash infatti, che significa che i dati non vengono memorizzati in modo contiguo ma sono hash sulla base delle sue chiavi di indicizzazione (usando una funzione hash) per memorizzare i valori in diversi indirizzi (interrogati here), e questo è solo un esempio (in effetti, penso che nei linguaggi dinamici sia un fenomeno comune avere array come tabelle hash).

Suppongo che questo risponda alla domanda con uno no.