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的指针

转载于:https://www.cnblogs.com/CPFlying/archive/2010/05/30/1747580.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值