1:编译器会为每一个空class安插一个char,使得这个class的两个objects对象在内存中配置独一无二的内存地址。这就解释了空类的大小为何为1(即使该类为派生类,也需要为其安插一个char来区分其对象)。(传统意义上这个char会被放到class 的尾端)
2:class 的大小主要和以下三种因素相关:
- 虚拟机制带来的负担:一个指针,或是指向一个相关的vbtl,或是一个虚基类对象(或是其偏移地址)
- 编译器对特殊情况所提供的优化处理(某些编译器会对empty virtual base class 进行特殊处理 VC++)
- 补齐机制alignment
3: