Größe eines Objekts bzgl. Overhead?
-
Bsp:
class A{ int a,b,c; }; A o;"o" besitzt nun 3 * 32 Bit werte, d.h. 12 byte! wie groß ist das Objekt nun wirklich im speicher + Overhead?
-
Das Objekt ist exakt
sizeof(A)Bytes groß (das sind mindestens 12 Byte, je nach Padding-Anforderungen deines Systems kann es auch größer werden).
-
Und wenn:
class A{ int a,b,c; }; class B{ . . . A *p; B(){ p= new A[3]; } .. }; B o;gibt mit dann sizeof(o) 36byte zurück?
-
Nein, vermutlich gibt es 4 zurück (vorausgesetzt B hat keine weiteren Member). In o hast du "nur" den Pointer, der über new[] angeforderte Speicherblock lebt außerhalb und wird deshalb von sizeof() nicht mitgezählt.
-
d.h. wenn ich verschachtelte Objekstrukuren (Arrays) habe kann ich nich direkt die gesamt rgöße ermitteln.. muss quasie rekursive die Objekstruktur durchlaufen und die einzlenen größen der objekte summieren und über das masterobjekt zurückgeben. Wenn du verstehst was ich meine!?
-
Wenn Du verschachtelte Arrays hast, liefert auch dort sizeof die korrekte Größe des Unterobjektes mal der Anzahl. Nur, Du hast hier keinen Array, sondern einen Zeiger, der auf ein dynamisch allokiertes Array zeigt. Kurz: sizeof liefert immer die korrekte statische Größe eines Typs.
Aber der Unterschied zwischen Zeiger und Array wurde Dir in einem Deiner letzten Threads schonmal erläutert

-
ja kenne den unterschied.. deswegen meine ich das rekusive durchlaufen der Dynamschen Arrays umd die größe zu berechnen!!