Autor Beitrag
[r2d2]
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: Mi 11.05.05 17:23 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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] Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 531

WinXP
D5 Ent
BeitragVerfasst: 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ß.

_________________
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind