深度探索C++对象模型———Data Member的布局

3.2 Data Member的布局(成员变量的布局)

C++类对象中成员变量是以什么样的空间内存而布局的呢?

对于下面一组data members(成员变量):

class Point3d {
public:
    // ...
private:
    float x;
    static List<Point3d *> *freeList;
    float y;
    static const int chunkSize = 250;
    float z;
};

根据前面提高过的C++的对象模型C++对象模型可知:

  • 只有non-static成员变量指向虚函数表的指针没有虚函数则不会生成这个指针)保存在class object中。

  • 其余的static成员变量static成员函数以及non-static成员函数都存放在程序的data segment中,和class object无关。

所以:non-static成员变量在class object中的排列顺序和被声明的顺序一样,任何中间介入的static data members如freeList 和chunkSize都不会放入对象布局当中。在上述例子里,每一个Point3d对象是由三个float组成,次序是x,y,z。但它们仅仅保证“较晚出现的成员变量在class object中有较高的地址”。也就是说各个成员变量不一定连续,比如一些边界调整(alignment)就可能需要填补一些bytes在其中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值