Speichergröße eines Objekts
-
Seid gegrüßt Programme,
einfache Frage hoffentlich, denn bei Google fand ich mit meinen Suchbegriffen nix - wie ermittel ich die Speichergröße in Bytes eines Objektes ? sizeof(MyObject) gibt Unsinn aus... oder kann ich die Größe des Objektes etwa nur so ermitteln, indem ich alle allokierten Elemente mittels sizeof aufsummiere ?
Gruß Winn
-
Nabend,
warum gibt sizeof(Object) nicht das richtige aus? Hast du Member, welche
dynamisch erzeugt werden? In diesem Falle duerfte es fast unmoeglich sein, da
du fuer dynamische Objekte nur die groesse des Zeigers (i.d.R 4Byte), welcher
auf die entsprechende Startadresse zeigt, bekommst. Falls das der Fall ist und
du wirklich die groesse deines Objektes haben willst, bleibt dir wohl der
Umweg ueber eine Memberfunktion nicht erspart.Falls dein Objekt keine dynamischen Objekte enthaelt, selbst aber dynamisch
erstellt worden ist, dann musst du darauf achten, dass du das Objekt
dereferenzierst:sizeof(*Object);
Wie sieht denn deine Klasse aus (oder Struktur)?
mfg
v R
-
Hey Virtuell,
ich hab den Faden mal weitergesponnen, danke für den Tipp, nun hab ich folgendes
#include <stdio.h> #include <stdlib.h> #include <stddef.h> #include "SetupTrans.h" int main() { int i; size_t MySize; for(i=0;i<100;i++) { fprintf(stderr,"\n(%d) - ",i); SetTrans MyTrans; MySize=sizeof(&MyTrans); fprintf(stderr,"Sizeof %ld\n",MySize); MyTrans.SetParameters(2,0,2,0,2,0); MyTrans.SetCells(8,8,8); MyTrans.SetDebugLevel(1); MyTrans.Run(); MySize=sizeof(&MyTrans); fprintf(stderr,"Sizeof %ld - ",MySize); MyTrans.~SetTrans(); fprintf(stderr,"Done\n"); } return 0; }
nun gibt mir das Programm "644" aus, welches schon eher paßt... allerdings allokiere ich in der Klasse selbst noch Speicher für Matrizen und transformiere sie anschließend - die Methodenliste + Deklarationen sind leider auch zu groß, als das ich sie hier komplett posten könnte. Poste unten mal die wichtigsten Elemente...
Der Grund weswegen ich nach einem sizeof(Objekt) suche liegt darin, daß mein Objekt irgendwie und irgendwo ca. 100KB verbrät, obwohl ich schon mehrmals nachgeprüft hab, daß ich auch zu jeder Allokation von Speicher auch das Release hab
Ne Idee ?
Freundlichst Winn
#ifndef _SETUPTRANS_H_ #define _SETUPTRANS_H_ #include "OrganizeLists.h" const int NotANumber = 65535; class LOrganize; class SetTrans { public: struct Operator { int iSwitch; int iQuantity; int *SkX; int *SkY; int *SkZ; double *ak; }; struct Operator *NW,*NiW; SetTrans(); ~SetTrans(); void SetMasterFile(char *ConfFile); void SetParameters(int WTypeX, int ScaleX, int WTypeY, int ScaleY, int WTypeZ, int ScaleZ); void SetDebugLevel(int iLevel); void SetCells(int XCells, int YCells, int ZCells); void Run(); protected: LOrganize MyNOp; LOrganize MyNiOp; int iScaleMax; int iXCells; int iYCells; int iZCells; int iWTypeX; int iWTypeY; int iWTypeZ; int iMaxScaleX,iScaleX; int iMaxScaleY,iScaleY; int iMaxScaleZ,iScaleZ; // Initialize double *DiagonalX, *DiagonalY, *DiagonalZ; double *NWxS0Matrix,*NWyS0Matrix,*NWzS0Matrix; double *NWxS1Matrix,*NWyS1Matrix,*NWzS1Matrix; double *NWxS2Matrix,*NWyS2Matrix,*NWzS2Matrix; double *PWxS0Matrix,*PWyS0Matrix,*PWzS0Matrix; double *PWxS1Matrix,*PWyS1Matrix,*PWzS1Matrix; double *PWxS2Matrix,*PWyS2Matrix,*PWzS2Matrix; . . . }; #endif