2015-07-13 9 views

Antwort

8

Der Inhalt einer Vec<T> ist, unabhängig von T, eine einzige Heap-Zuweisung von self.capacity() * std::mem::size_of::<T>() Bytes. (Vec overallocates-das ist der springende Punkt von Vec<T> anstelle von Box<[T]> -so ist es die Kapazität, nicht die Länge, die in dieser Berechnung von Bedeutung sind.) Die tatsächliche Vec<T> selbst nimmt drei Wörter (24 bytes auf einer 64-Bit-Maschine).

[f32; 5] ist nur ein Stück Speicher mit fünf 32-Bit-Fließkommazahlen ohne Umleitung; dies kommt auf zwanzig Bytes (daher std::mem::size_of::<[f32; 5]>() == 20).

+0

Danke. Aber 'Vec >' würde als 'Vec' von Zeigern gespeichert werden, oder? – user72961

+3

Ein 'Vec >' würde eine Reihe von eng gepackten 3-Wort-Strukturen haben. Eines dieser Wörter wäre ein Zeiger. Die anderen beiden sind die Kapazität und Länge. – Shepmaster

+0

Was ist mit Ausrichtung? Wie groß ist der Heap für 'Vec ', 'Vec ' (ist es gleich der Kapazität), 'Vec <(u8, u8)>', 'Vec <[u8; 3]>' '? – ArtemGr

Verwandte Themen