zoukankan      html  css  js  c++  java
  • 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,是间接存取。额外的间接存取会降低“把所有的处理都搬移到寄存器内执行”的优化能力。 虚拟继承的关系图如下:
                                                                      
  • 相关阅读:
    初步认识,合并集(树)
    20180918-1 词频统计
    20181011-1 每周例行报告
    2018091-2 博客作业
    项目第六天
    项目第五天
    项目第四天
    项目第三天
    总结随笔
    测试报告
  • 原文地址:https://www.cnblogs.com/ladawn/p/8227923.html
Copyright © 2011-2022 走看看