Domanda

Sono su una piattaforma a 64 bit, in modo da tutte le ADR di memoria sono 8 byte.

Quindi, per ottenere una stima del l'utilizzo della memoria di un array, dovrei aggiungere 8 byte alla sizeof (DATATYPE) per ogni voce nella matrice.

Esempio:

short unsigned int *ary = new short unsigned int[1000000]; //length 1mio
//sizeof(short unsinged int) = 2bytes 
//sizeof(short unsinged int*) = 8 bytes

Così fa ogni voce occupa 10bytes? e sarà la mia matrice di lunghezza a 1 milione di conseguenza utilizzare atleast 10megabytes?

grazie

È stato utile?

Soluzione

No, non si ottiene un puntatore per ogni indice di array. Si ottiene un singolo puntatore che indica la matrice, che è un blocco contiguo di memoria, che è il motivo per cui l'indirizzo di qualsiasi indice può essere calcolato l'indice stesso più l'indirizzo matrice.

Ad esempio, se la variabile a conosciuta dal 0xffff0012 posizione di memoria è impostato 0x76543210, allora potrebbero essere disposti in memoria, come:

            +-------------+ This is on the stack or global.
0xffff0012  |  0x76543210 |
            +-------------+

            +-------------+ This is on the heap (and may also
0x76543210  |  a[     0]  |   have some housekeeping information).
            +-------------+
0x76543212  |  a[     1]  |
            +-------------+
0x76543214  |  a[     2]  |
            +-------------+
0x76543216  |  a[     3]  |
            +-------------+
               :       :
            +-------------+
0x7672B68E  |  a[999999]  |
            +-------------+

e si può vedere che l'indirizzo dell'indice n è 0x76543210 + n * 2.

Quindi sarà effettivamente avere un puntatore di 8 byte e un milione di pantaloncini 2 byte, che, nel suo caso, ammonta a 2,000,008 byte.

Questo è in cima ad ogni testa malloc servizio di pulizia che, come il puntatore stesso, è minuscola rispetto al vostro allineamento attuale.

Altri suggerimenti

No, c'è solo un singolo puntatore qui, non è un puntatore per ogni voce. La vostra stima dimensione è 1000000 * 2 + 8.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top