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

来源:互联网 发布:嘉兴软件开发制作 编辑:程序博客网 时间:2024/06/05 03:30

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在其中。

阅读全文
0 0
原创粉丝点击