Sind Variablen vom Typ Vec<[f3; 5]>
als zusammenhängendes Array gespeichert (von Vec::len() * 5 * sizeof(f32)
Bytes) oder ist sie als Vec
von Zeigern gespeichert?Wie ist das Speicherlayout eines Vektors von Arrays?
6
A
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
).
Verwandte Themen
- 1. Wie ist das Speicherlayout eines dynamischen Delphi-Arrays des dynamischen Arrays von X?
- 2. Wie ist das Speicherlayout eines C/C++ Programms?
- 3. Wie ist das Format eines AARRGGBB-Arrays?
- 4. Zurückgeben eines Vektors oder Arrays von einer Funktion in C++
- 5. Wie ist das Speicherlayout einer Klasse gegenüber einer Struktur
- 6. Erstellen eines Vektors von Indizes eines sortierten Vektors
- 7. Erzeugen von Poweets eines Vektors
- 8. Kombinieren eines Vektors von Strings
- 9. Initialisierung eines Vektors von Vektoren?
- 10. Füllen eines Vektors von Paaren
- 11. Chunking eines Vektors von Strings
- 12. C++ Klasse Speicherlayout
- 13. Das Überprüfen eines Arrays von Eingabefeldern ist nicht leer.
- 14. Rotieren eines Vektors (Array)
- 15. Einrichten eines Arrays, das
- 16. Teilen eines STL-Vektors
- 17. Ersetzen Elemente eines Vektors
- 18. Größe eines statischen Vektors
- 19. Wie groß ist die Kapazität eines leeren Vektors?
- 20. Ruby: Erlaube das Aktualisieren eines Arrays, das eine Klassenvariable ist
- 21. finden String eines Arrays, das
- 22. R - Mittelwert von bestimmten Abschnitten eines Vektors
- 23. Löschen eines Vektors oder Definieren eines neuen Vektors, welcher ist schneller
- 24. Ist der Zugriff auf ein Feld aus mehreren Strukturen langsamer als auf Elemente eines Arrays/Vektors?
- 25. Permutation eines Vektors
- 26. Ausgabe Member-Typ eines Vektors von Typen
- 27. C++: Ändern eines Vektors von share_ptr Elemente
- 28. Wie vergleicht man ein Array und einen Teil eines Vektors?
- 29. Speicherlayout der ausführbaren Datei
- 30. Wie kann man Winkel eines Vektors begrenzen?
Danke. Aber 'Vec>' würde als 'Vec' von Zeigern gespeichert werden, oder? –
user72961
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
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