1.一个class object的内存空间,除了nonstatic data member外,还有:
(1)编译器自动加的额外data member,包括vptr、bptr(指针)
(2)alignment(边界校准)的需求而添加的pad空间。
2.对于nonstatic和static成员变量的存取上,没有时间和空间上的差异。
3.若多个class有相同名称的static data member,则编译器会对他们进行暗中编码(name-mangling),以获得独一无二的程序识别代码。
4.使用多态后,带来了时间和空间的额外负担,主要有:
(1)导入一个virtual table,存储每一个virtual function的地址。
(2)在每一个class object 中加入vptr,指向virtual table。
(3)加强constructor,用来为vptr设定初始值。
(4)加强destructor,用来抹掉指向virtual table的vptr。
5.虚拟继承下:
(1)class若有virtual base class,则其有两部分,一个不变区域(直接存取),一个共享区域(间接存取)。
(2)虚拟继承中,driver class存在一个bptr,指向virtual base class,是间接存取。额外的间接存取会降低“把所有的处理都搬移到寄存器内执行”的优化能力。 虚拟继承的关系图如下: