sizeof(class)

在使用sizeof计算类的大小时要注意:

  1. sizeof是用来计算栈中变量的大小的,不涉及全局区,故sizeof计算类的大小时,不考虑静态成员变量的大小;

  2. 类与结构体一样,都存在字节对齐问题;

  3. 类中普通函数不占用类的大小,类中虚函数不管有多少个只需要占用一个虚函数表指针的大小;

  4. 类中常量存在静态存储区不占用类大小,如const、static、enum;

  5. 子类的大小=子类新增加的大小+父类大小。

// 64位系统
class C
{
public:
    char a;         //占用1个字节
    static char b;  //不占用类大小
    void *p;        //指针在64位系统中占用8个字节
    static int *c;  //不占用类大小
    virtual void func1();   //虚函数占用一个虚函数表指针的大小
    virtual void func2();   //8个字节
};

sizeof(C)计算得到的类大小为:24

因为有字节对齐问题,char a;需要补7个字节,实际占用8个字节的空间。所以sizeof(C)计算的是char a;,void *p,虚函数表指针 占用空间的大小,总共占用3*8=24个字节。

当对数组进行计算时,结果是数组的总字节数

char a[5];
int b[5];
sizeof(a) = 5;
sizeof(b) = 20; //32bit系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值