PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Speicherverbrauch std::list


fondness
2013-01-13, 13:39:22
Hallo, vielleicht weiß ja jemand eine Antwort:
Und zwar beobachte ich schon länger das eine std::list mehr Speicher benötigt als es die Theorie sagt, deshalb habe ich das jetzt mal genauer untersucht:

Und zwar benötigt einen std::list<int> mit 500mio Elementen bei mir fast ~15Gib RAM. Kompiliert wurde die x64 release Version.

Eigentlich sollten es pro Element zwei 8 Byte Pointer und ein 4 Byte int-Wert sein. Macht also 20 Byte pro Element. Mal die 500mio Elementen wäre ich bei 10GB. Wo kommen die zusätzlichen 50% her? Eine Antwort darauf ist das aligment, das bei Visual Studio 2010 laut meinen Recherchen bei 8 Byte liegt. Dann wären wir bei 24Byte pro Element, das erklärt aber noch immer nicht vollständig den hohen Speicherverbauch.

Gast
2013-01-13, 14:31:26
Afaik sind es 3 Pointer:
Einer auf das nächste Listenelement, einer auf das vorherige und einer auf den jeweiligen Int.
macht also 24 Byte für die Pointer + 4 bzw 8 fürs Int, also 32 Byte pro Element

mksn7
2013-01-13, 15:22:11
Ich dachte eigentlich immer, dass die meisten STL-Implementierungen für kleine Objekte wie ein einzelnes Int Sonderlösungen haben, sodSgetcass das Int direkt mit den Pointern gespeichert wird.

Der Speicherverbrauch passt natürlich eher zum anderen Modell.

Hab grad mal ausprobiert: Mit Linux x64 und gcc komm ich für 50000000 elemente auf 1536 MByte = 32 Byte pro Element. Ist also das gleiche.