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
    

Anmelden zum Antworten