C++对象模型

在C++对象中:

  • 数据成员:
    • static
    • nonstatic
  • 函数成员:
    • static
    • nonstatic
    • virtual
C++ 对象内存布局

C++ 对象模型是从简单对象模型派生而来,并对内存空间和存取时间做了优化。

  • nonstatic data members 被配置于每一个class object之内,static data members 则被存放在个别的class。
  • virtual function 以2个步骤支持:
    • 每一个class产生出一堆指向virtual function的指针, 放在表格之中, 这个表格即为virtual table(vtbl)。
    • 每一个class object安插一个指针,指向相关的virtual table,这个指针即为vptr。vptr的设定和重置都由每一个class的constructor,destructor,copy assignment运算符自动完成。

如图所示:


3.jpg
C++ 类的内存占用大小
  • 空类
    空类没有任何数据成员,但实际情况是空类的内存占用为1字节。因为如果对象不完全占用内存空间,那么空类就无法取得 实例对象的地址,this指针失效,因此不能实例化。
    但类的定义是由成员数据和成员函数组成,在没有成员数据的情况下,还可以有成员函数,仍然需要实例化。
  • 数据成员开销
  • 内存对齐
  • 虚函数表的开销

参考资料
1、《深度探索C++对象模型》 [美] Stanley B.Lippman

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容