C++类的大小(sizeof)

1、空类

class Base {};

sizeof(Base)等于1。Base是一个空类,类在进行实例化的时候就是给一个实例分配一块内存,对一个空类进行实例化的时候,同样需要分配一块内存,编译器默认分配一个字节大小的内存给空类实例,所以空类的大小为一个字节。

2、一般非空类

class Base {
    int val;
    char ch;
};

sizeof(Base)等于8。Base包含了两个数据成员,类型为int和char,分别占用4个字节和1个字节,根据内存对齐的原则,Base大小为8个字节。

3、包含普通成员函数的一般非空类

class Base {
    int val;
    char ch;
    void fun(){}
};

sizeof(Base)等于8。类的大小只与它的数据成员有关,与普通成员函数、构造函数、析构函数无关。

4、包含虚函数的类

class Base {
    int val;
    char ch;
    virtual void fun(){}
};

sizeof(Base)等于12。Base定义了一个虚函数,编译时会生成虚函数表,该类型的实例都包含一个指向虚函数表的指针,这个指向虚函数表的指针保存在实例内存中的最前面的位置,根据内存对齐的原则,Base的大小为12个字节。

5、包含静态数据成员的类

class Base {
    int val;
    char ch;
    static int num;
};

 sizeof(Base)等于8。因为静态数据成员保存在全局静态数据区,该类型的所有实例共享同一个静态数据成员,静态数据成员只分配一次内存。因此,Base的大小为8个字节。

6、单继承的类

class Base {
    int val;
    char ch;
};
class Derive: public Base {
    char c;
};

 sizeof(Derive)等于12。Base的大小为8个字节,内存对齐值为4个字节,因此在Derive中相当于包含两个成员,类型分别为Base、char,根据内存对齐,对齐值为4,Derive的大小为12个字节。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值