Benötigter Speicherplatz eines Objektes
-
Ich möchte gerne wissen, wieviel Speicherplatz ein Objekt, das ich
erzeuge anfordert.Als mir geht es nicht darum das sizeof zu ermitteln, sondern auch eventuelle
weitere Speicheranforderungen innerhalb des Konstruktors.Gibt es irgendein Verfahren, das mir dabei behilflich sein könnte?
Welches Vorgehen würdet ihr wählen?Gruß,
Andy
-
Was denkst du wie viel Speicherplatz ein von dir erstelltes Objekt einnimmt?
Da kann man nur sagen kommt auf dein Objekt an. Schau mal auf die Membervariablen des Objektes, diese haben bekanntlich jeweils eine Größe. Zusätzlich kommen bei Vererbung noch virtual tabels. Nur so als Tipp.
-
Andy23 schrieb:
Als mir geht es nicht darum das sizeof zu ermitteln, sondern auch eventuelle weitere Speicheranforderungen innerhalb des Konstruktors.
Geht im allgemeinsten Fall entweder über manuelles loggen (schlecht), eine kleine Modifikation in der Speicherverwaltung (schon besser) oder über einen Profiler (nimm das).
-
Danke euch beiden!
HighLigerBiMBam schrieb:
Was denkst du wie viel Speicherplatz ein von dir erstelltes Objekt einnimmt?
Wenn ich es wüßte, würde ich es nicht fragen...
HighLigerBiMBam schrieb:
Da kann man nur sagen kommt auf dein Objekt an.
Andy23 schrieb:
Ich möchte gerne wissen, wieviel Speicherplatz ein Objekt, das ich
erzeuge anfordert.Ansonsten hätte ich ja nach der Größe eines Objekttypen gefragt

HighLigerBiMBam schrieb:
Schau mal auf die Membervariablen des Objektes, diese haben bekanntlich jeweils eine Größe. Zusätzlich kommen bei Vererbung noch virtual tabels. Nur so als Tipp.
Diese sind ja (abgesehen von alignment) afaik äquivalent zu sizeof. Sobald für einen Zeiger intern dynamisch neuer Speicher angefordert, hat man damit verloren.
PROFI-ler schrieb:
Geht im allgemeinsten Fall entweder über manuelles loggen (schlecht),
Wie willst das loggen (ohne 'Veränderung' der Speicherverwaltung)?
PROFI-ler schrieb:
eine kleine Modifikation in der Speicherverwaltung (schon besser)
Daran hab ich auch schon gedacht. Könnte mit multithreading allerdings umfangreicher werden
PROFI-ler schrieb:
oder über einen Profiler (nimm das).
Ich werd mal kucken, ob Valgrind mir behilflich wird! gprof scheint bei multithreading überfordert.
Gruß & Danke,
Andy
-
Hi Andy32,
ich sehe nicht, warum du sizeof nicht verwenden kannst/willst. Das hat mir bislang in allen Fällen gut weitergeholfen.
Andy23 schrieb:
...
Andy23 schrieb:
Ich möchte gerne wissen, wieviel Speicherplatz ein Objekt, das ich
erzeuge anfordert.Ansonsten hätte ich ja nach der Größe eines Objekttypen gefragt ;)...
Nach meiner Ansicht ist das dasselbe (
sizeof(int) == sizeof(3)- auch für nichtprimitive Typen).Andy23 schrieb:
...
Diese sind ja (abgesehen von alignment) afaik äquivalent zu sizeof. Sobald für einen Zeiger intern dynamisch neuer Speicher angefordert, hat man damit verloren.Auch hier verstehe ich nicht, was an einem mit new erzeugten Objekt "größentechnisch" anders sein soll als an einem auto-Objekt...
Insgesamt weiß ich nicht, ob ich einfach nicht verstehe, was du brauchst oder du noch irgendwo einen Denkfehler machst.
Gruß,
Simon2.
-
Andy23 schrieb:
Ich möchte gerne wissen, wieviel Speicherplatz ein Objekt, das ich
erzeuge anfordert.Wozu?
-
Simon2 schrieb:
ich sehe nicht, warum du sizeof nicht verwenden kannst/willst.
Weil
auch eventuelle
weitere Speicheranforderungen innerhalb des Konstruktors.
-
sizeof(Object)
-
Ich kuck mir die Ausgaben jetzt mit einem Profiler an.
Samyboy schrieb:
sizeof(Object)
(IRONIE!!!)
-
Jockelx schrieb:
Simon2 schrieb:
ich sehe nicht, warum du sizeof nicht verwenden kannst/willst.
Weil
auch eventuelle
weitere Speicheranforderungen innerhalb des Konstruktors.Welche "... eventuelle weitere Speicheranforderungen innerhalb des Konstruktors ..." können denn nicht mittels sizeof() ermittelt werden?
......
Ah - vermutlich geht es darum, dass man ein Objekt erzeugt, das
a) seinerseits wiederum dynamisch Speicherplatz anfordert und
b) das man nicht seinerseits zum Mitprotokollieren dieser Aktivitäten bringen kann/möchte.
Stimmt's?OK - das wäre tatsächlich nichttrivial ... zumal IMHO gar nicht unbedingt klar ist, was dann noch unter "Speicherplatz des Objekts" fällt und was nicht.
Beispiel:struct A { char* ac; A(size_t i) : ac(new char[i]) {} // würde man wohl zu "Speicherplatz des Objektes" zählen void f(size_t i) { vector<int> v(i); // das auch noch? b B; // Wenn B nun seinerseits noch tief im Bauch dynamisch Speicher alloziert ... auch? ... } static char ac_Static[200]; // das hier? static void f_static() { vector<int> v; // das hier? } ...Gruß,
Simon2.