Speicherbedarf von Klassen und deren Methoden in Arrays und Containern
-
Hallo zusammen,
ich mache mir gerade Gedanken bzgl. des Speicherbedarfs von Methoden in einer Klasse.
Bei den Daten ist das ja klar, habe ich ein Array von 10 int sind das 10x4 Bytes.
Aber wie ist das mit den Methoden? Habe ich bei z.B. einem Array von 10 Klassen auch 10x die Methoden kopiert, oder (was eig. logisch wäre) habe ich nur jeweils einen Verweis im Speicher?

Thx im Voraus
-
"Methoden" sind normale Funktionen. Sie kosten bei Objekten keinen Speicher. Virtuelle Memberfunktionen hingegen kosten typischerweise insgesamt einen Pointer. Du kannst also deinen Objekten beliebig viele Funktionen mitgeben, bei std::string sind es ~150.
-
mcam77 schrieb:
Bei den Daten ist das ja klar, habe ich ein Array von 10 int sind das 10x4 Bytes.
Ja das ist gut möglich. Es könnten unter Umständen aber auch 20 Bytes sein.
mcam77 schrieb:
Habe ich bei z.B. einem Array von 10 Klassen auch 10x die Methoden kopiert, oder (was eig. logisch wäre) habe ich nur jeweils einen Verweis im Speicher?

Ne. Für eine Methode wird nur 1x Speicher angelegt. Um nun zu wissen, auf welches Objekt sich eine Methode beziehen soll, hat jede Methode den zusätzlichen Parameter
this.
-
Supi, Thx ihr beide

-
Dazu mal grad ne Frage: Ich habe mal gehört, dass Funktionen/Methoden, die im Quellcode hinternander implementiert wurden später auch im Speicher nebeneinander leigen. Stimmt das? Oder kommt das auf den Compiler an?
-
Skym0sh0 schrieb:
Oder kommt das auf den Compiler an?
^ - Wozu auch immer das relevant sein sollte.
-
Naja, ich habs selbst nicht gelesen, en Kollege meinte das mal, als er ein Buch für Spieleprogrammierung am lesen war.
Das Argument dafür war halt, dass es so weniger Cache-Misses gibt, wenn man die Methoden/Funktion halbwegs intelligent ordnet in der Implementierungsreihenfolge.
-
Skym0sh0 schrieb:
Naja, ich habs selbst nicht gelesen, en Kollege meinte das mal, als er ein Buch für Spieleprogrammierung am lesen war.
Das Argument dafür war halt, dass es so weniger Cache-Misses gibt, wenn man die Methoden/Funktion halbwegs intelligent ordnet in der Implementierungsreihenfolge.
Haha. Also ich könnte mir gut vorstellen, daß Funktionen in Deklarationsreihenfolge oper Definitionsreihenfolge später in die exe geworfen werden. Die Datenstrukturen, die zu solchen Verhalten führen würden, scheinen mir naheliegender als welche, die zu alphabetischer oder zufälliger Ausgabe führen würden.
Schau auch mal auf die Attribute hot und cold auf
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html