对象模型

C++ 对象模型描述了对象在内存中的布局和组织方式,以及编译器如何实现继承、多态、虚函数等特性。理解对象模型有助于优化内存使用、调试问题和避免未定义行为。

[TOC]

基础对象

空类

空类(Empty Class) 是指不包含任何显式成员(如变量、函数)的类。尽管空类看似不占用内存,但实际上它的大小至少为 1 字节。

为什么空类的大小至少为 1 字节?

  1. C++ 标准要求每个对象的地址必须唯一,如果空类大小为 0,则同一类型的不同对象会共享相同的内存地址。

  2. 编译器为空类隐式插入一个占位字节,确保对象有唯一地址。

普通类

普通类对象的成员变量存储规则如下:

  • 非静态成员变量按声明顺序存储,并考虑字节对齐引入填充字节。

  • 静态成员变量存储在数据段中,与具体的对象无关。

最后更新于