C++对象模型---第 3 章 Data语意学

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,是间接存取。额外的间接存取会降低“把所有的处理都搬移到寄存器内执行”的优化能力。 虚拟继承的关系图如下:
                                                                  

 


 

posted @ 2018-01-07 14:07  IvanB.G.Liu  阅读(193)  评论(0编辑  收藏  举报