C++ sizeof 计算类的大小

计算类的的大小时只考虑成员变量的大小,而不考虑成员函数的大小!

但是如果类中含有虚函数,那么在计算类的大小时就要额外的加上4个字节!这4个字节是虚函数表占的字节数!

在计算类的大小时还要注意一点就是 内存对齐!

看一个例子:

class CTest
{
   
char ch;
};
// sizeof(CTest) = 1
 
class CTest
{
   
char ch;
   
int  num;
};

// sizeof(CTest) = 8

很奇怪,为什么第二个CTest的大小是8字节了,这里就涉及到了内存对齐问题

int的大小为 4字节, 由于内存所以ch的填充3个字节!所以CTest的大小为8字节

 

再来看一列:

class CTest
{
   
char ch;   
   
int  num;
   
double b;   
};

// sizeof(CTest) = 16

这里ch+num=5字节,填充到b的大小,也就是8字节!

class CTest
{
   
char ch;  

    double b;
    int  num;   
};

// sizeof(CTest) = 24

这里ch和num都填充到了8字节

 

继承类大小

class CT1()
{
  
int num;
};

class CT2 : public CT1
{
  
int val;
};

// sizeof(CT2) = 4+4 = 8;

sizeof (继承类) = 本身成员变量+父类的大小,如果是虚拟继成的话,则另外加一个指向父类指针的大小.

如果两个类C1,C2分别继承了含有虚函数的类C3,类C4同时继承C1和C2,那么在C4只保留一份指向虚基类C3的指针

posted on 2010-05-30 20:43  思想在飞  阅读(689)  评论(2编辑  收藏  举报