1.C++ 在布局以及存取时间上的主要的额外开销是由virtual引起,包括:virtual function机制:用以支持一个小效率的执行期绑定
virtual base class 用以实现“多次出现在集成体系中的base class,有一个单一而被共享的实体”
另外还有一些额外开销,发生在“一个派生类和其第二或后继之基类之间的转换”之间。
2.C++对象模型
i.简单模型
一个对象有一系列的slots(指向成员的指针)组成(指针数组),每个slot(指针)指向一个成员。
注:此模型未应用于实际产品
ii.表格驱动对象模型
对象维护两个slots,分别指向数据成员表和函数成员表
注:此模型未实际应用于产品
iii.C++对象模型
非静态数据成员被配置在每一个对象之内,静态数据成员,静态和非静态函数成员被放在所有对象之外
虚函数则以两个步骤支持:1.每个类对象维护一个指向virtual table(vtbl)的指针(vptr).vptr的设定和重置都由每个类的constructor,destructor和copy assignment
运算符自动完成。每个类所关联的type_info object用以支持runtime type identification,RTTI.
2.vtbl是一个指针数组,维护指向类之virtual function的指针。