class A{};//1
class B{
public:
B(){};//no space
~B(){};//no space
int function(){};//un-virtual function, nospace
};//1
class C{
public:
C(){};//no space
~C(){};//no space
int function(){};//un-virtual function, nospace
private:
int i;//4byte
};//4
struct D {
int a;//4byte
int (*f)(void);//pointer member, 4byte
};//8
class E {
public:
E(){};//no space
~E(){};//no space
virtual int function(){return 1;};//virtual function, share on virtual-function table, share 4byte with other virtual functions
virtual int function2(){return 1;};//virtual function, share on virtual-function table, share 4byte with other virtual functions
private:
int i;//4byte
};//8
class F {
public:
F(){};//no space
~F(){};//no space
static int function(){return 1;};//no space
virtual int function2(){return 1;};//share 4byte space
const int function3(){return 1;};//no space
inline int function4(){return 1;};//no space
static inline int function5(){return 1;};//no space
};//4
class G {
public:
G():j(0){};//no space, ATTENTION: no-static member variable could be initialization ONLY in this way!!!
//AND: no-static member variable must be initial!!!(otherwise you cannot )
~G(){};//no space
static int i;//static member, no space
const int j;//4 byte
int k;//4byte
};//8
int main()
{
printf("sizeof A = %d\n", sizeof(A));
printf("sizeof B = %d\n", sizeof(B));
printf("sizeof C = %d\n", sizeof(C));
printf("sizeof D = %d\n", sizeof(D));
printf("sizeof E = %d\n", sizeof(E));
printf("sizeof F = %d\n", sizeof(F));
printf("sizeof G = %d\n", sizeof(G));
system("pause");
}
/*
sizeof A = 1
sizeof B = 1
sizeof C = 4
sizeof D = 8
sizeof E = 8
sizeof F = 4
sizeof G = 8
*/
C++内存分布
最新推荐文章于 2024-05-20 15:29:54 发布