详细的参看《C++对象模型》
C++98标准规定的类存储空间如下:
1.出于执行效率的考虑,所有的成员函数都在编译时期转换为普通函数,所以不占运行期类内存空间;
2.非静态成员,根据数据类型分配相应空间,顺序不确定,目前大部分编译器都按声明顺序分配;
静态成员,在全局数据区,不占类存储空间。
3.存在虚函数的,由于虚函数是运行期绑定,必须分配运行期内存空间,考虑提高存储空间,采用统一的虚函数表
存储该类的所有虚函数,而所有类对象会添加一个指向该表的指针vptr;
4.存在继承关系,派生类会增加基类的存储空间(不是全部可见);
5.如果是虚继承,则会在派生类增加虚基类的索引指针,保证只有一份拷贝;
6.空间对齐,处于硬件处理效率的考虑(最大化数据通路传输能力)#pragma pack(n),一般32位处理器,n=4;
但是空类不作对齐处理,会增加一个char成员,即为1Byte,目的是为了区分不同空类对象;