2015-07-13 9 views

risposta

8

Il contenuto di un Vec<T> è, indipendentemente da T, una singola allocazione heap, di self.capacity() * std::mem::size_of::<T>() byte. (Vec overallocates -questo è il punto intero di invece di Box<[T]> -solo è la capacità, non la lunghezza, che contano in questo calcolo.) L'attuale Vec<T> prende tre parole (24 bytes su un computer a 64 bit).

[f32; 5] è solo un blocco di memoria contenente cinque numeri a virgola mobile a 32 bit, senza alcun riferimento indiretto; questo arriva a venti byte (quindi std::mem::size_of::<[f32; 5]>() == 20).

+0

Grazie. Ma 'Vec >' verrebbe memorizzato come un 'Vec' di puntatori a destra? – user72961

+3

A 'Vec >' avrebbe una serie di strutture a 3 parole ben impacchettate. Una di quelle parole sarebbe un puntatore. Gli altri due sono la capacità e la lunghezza. – Shepmaster

+0

Che dire dell'allineamento? Quanto è grande l'heap per 'Vec ', 'Vec ' (è uguale alla capacità), 'Vec <(u8, u8)>', 'Vec <[u8; 3]>'? – ArtemGr

Problemi correlati