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,是间接存取。额外的间接存取会降低“把所有的处理都搬移到寄存器内执行”的优化能力。 虚拟继承的关系图如下:
                                                                      
  • 相关阅读:
    nodejs cheerio模块提取html页面内容
    简短的perl程序
    laravel 模型操作
    Laravel 学习笔记
    记录一下应该养成的好习惯
    phpstudy设置允许远程访问mysql数据库
    删除专家账号,要注意删干净
    使用 Composer 安装Laravel扩展包的几种方法
    上传文件太大,后台无法获取到文件的问题
    在Laravel中使用mongoDB
  • 原文地址:https://www.cnblogs.com/ladawn/p/8227923.html
Copyright © 2011-2022 走看看