Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Was liest InstanceSize aus?


[r2d2] - Mi 11.05.05 17:23
Titel: Was liest InstanceSize aus?
Hallo

InstanceSize gibt doch den Speicherbedarf eines Objekts in Bytes an.
Von einem kleinen Programm, das laut Windows Task-Manager 11mb Speicher benötigt, habe ich mir jetzt mit dieser Methode den Speicherbedarf der speicherintensivsten Objekte angeben lassen. Aufeinanderaddiert ergeben die Werte aber nur ca. 2kb.

warum? :shock:


delfiphan - Mi 11.05.05 17:48

a) Es kann sein, dass im Konstruktor (oder anderswo) noch Speicher alloziert wird (GetMem, etc.)
b) Der Pointer aufs Objekt musst du auch mitzählen (zusätzlich 4 Bytes)
c) Der Task-Manager zeigt nicht direkt an, wieviele Bytes von irgendwelchen Klassen benötigt werden.


[r2d2] - Mi 11.05.05 20:03

Zitat:
c) Der Task-Manager zeigt nicht direkt an, wieviele Bytes von irgendwelchen Klassen benötigt werden.

Das ist mir schon klar.
Punkt a) wird wohl die Hauptursache sein, denn mehrere MB bekommt man durch Pointer allein nicht so schnell zusammen.


UC-Chewie - Mi 11.05.05 21:15

InstanceSize zeigt dir einfach die Größe an, die ein Exemplar deines Objektes mit allen primitven und zusammengesetzten Typen belegt.
Primitive und zusammengesetzte Typen meinen hier Ganzzahlen, Fließkommazahlen, Zeiger, Mengen, Records und statische Arrays. Dynamisch allozierte Speicherstrukturen wie dynamische Records, Objekte und dynamishe Arrays werden hier nicht mitgezählt, sondern nur jeweils ein 4 Byte großer Zeiger.
Ein Objekt, das ein 1 MB großes Array dynamisch alloziert, ist dennoch nur 8 Byte (VMT + Zeiger auf das Array) groß.