深度探索C++对象模型

​ C++在布局以及存取时间上主要的额外负担是由virtual引起,包括:virtual functionvirtual base class

1.1 c++对象模式

​ C++中有两种类数据成员:staticnonstatic,以及三种类成员函数:staticnonstaticvirtual

​ 简单对象模型:成员本身不存放在object中,只有指向成员的指针存放在object中。object的成员是以slot的索引值来寻址。

​ 表格驱动模型:将所有与成员相关的信息抽象出来,放在一个data member table和一个member function table之中,class object本身则含有指向这两个表格的指针。member function table是一系列的slots,每个slot指出一个member function,data member table 则直接含有data本身。该模型并没有直接应用到编译器当中,但该观念却成为支持virtual function的一个有效方案。

​ C++对象模型:Nonstatic data members被配置于每一个class object之内,static data members则被存放在所有的class object之外,staticNonstatic function members也被存放在所有的class object 之外。virtual function则以两个步骤支持:1、每一个class产生一堆指向virtual function的指针,放在表格中,该表格称为virtual table;2、每一个class object被添加了一个指针,指向相关的virtual table。通常这个指针称为vptrvptr的设定和重置都由每一个classconstructordestructorcopy assignment运算符自动完成。每一个class所关联的type_info object也经由virtual table被指出了,通常被放在表格的第一个slot处。

本文标题:深度探索C++对象模型

文章作者:Unil

发布时间:2019年05月01日 - 13:16:25

最后更新:2019年05月01日 - 13:36:17

原始链接:http://www.unil.online/深度探索C++对象模型.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%