benötigte Speichermenge einer Klasseninstanz



  • hi,

    ich hab eine Klasse die ein paar membervariablen und einige Funktionen hat. Wie kann ich jetzt die Größe oder besser die benötigte Menge dieser Klasse je Instanz herausfinden (ohne selbstausrechnen). Ich hab es schon mit

    CKlasse iKlasse;
    int i = sizeof(iKlasse);
    

    probiert. Es werden 32 angezeigt. Stimmt der wert nun?

    Die sache ist die, es kommt immer 32 raus. Auch wenn ich alle Funktionen auskommentiere. Die Funktionen müssten doch auch speicherplatz im Speicherbelegen? 😕



  • Chris++ schrieb:

    Die sache ist die, es kommt immer 32 raus. Auch wenn ich alle Funktionen auskommentiere. Die Funktionen müssten doch auch speicherplatz im Speicherbelegen? 😕

    sizeof liefert dir die Größe eines Objekts und die ist unabhängig von den Memberfunktionen, da diese nur genau einmal existieren (unabhängig von der Anzahl der Objekte).



  • Chris++ schrieb:

    Die sache ist die, es kommt immer 32 raus. Auch wenn ich alle Funktionen auskommentiere. Die Funktionen müssten doch auch speicherplatz im Speicherbelegen? 😕

    Jain...
    Ja, die Funktionen existieren irgendwo im Programmcode und dieser liegt irgendwo im Speicher.
    Nein, der Programmcode existiert ja auch ohne eine Instanz deiner Klasse bzw. die Funktionen sind ja nicht zweimal da, nur weil du vielleicht 2 Instanzen deiner Klasse hast.

    In deinem Falle bedeutet das, das deine Klasse 32 Bytes je Instanz benötigt. Durch Hinzufügen oder Auskommentieren von Funktionen ändert sich der Programmcode (und damit die Größe deines Programmes). Der Speicherbedarf für eine Instanz deiner Klasse bleibt aber gleich.

    [Edit]man, bin ich langsam im tippen



  • HumeSikkins schrieb:

    sizeof liefert dir die Größe eines Objekts und die ist unabhängig von den Memberfunktionen, da diese nur genau einmal existieren (unabhängig von der Anzahl der Objekte).

    stimmt, wenn ich eine membervariable hinzufüge dann wird das Objekt größer.



  • Ja, weil jede Membervariable immer einen eigenen Speicherbereich pro Objekt braucht, außer sie ist als staitc deklariert. Oder willst du, dass alle Objekte immer auf dem gleichen Speicherbereich rumschreiben? 🙂 (Außnahme wieder static)


Anmelden zum Antworten