深度搜索C++对象模型1-关于对象

刚开始看深度搜索C++对象模型这本书,听说这本书很好,所以打算暑期的时候看看,为了促进学习,所以会经常将自己的一些所得写出来,起到总结的作用,理解有错误的地方,还望大家指出来,谢谢了。

内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

数据成员: static data,nonstaticdata

函数static fun ,nonstatic fun,virtual fun

一.

1  C++会因为封装和继承在空间或者执行期带来不良后果吗?

   不会,可以分析类里面的成员布局(后面会有解释)

2  C++在布局以及存取时间上的主要负担是谁引起的?

    虚函数 和  虚继承

二 .C++对象模式

    1  简单对象模型 :尽量降低C++编译器的设计复杂度,赔上的则是空间和执行期的 效率 一个object 是一系列的slot(防止因为成员对象的改变而改变内存大小) ,每一个slot指向一                                      个member

    2  表格驱动模型:在简单模型的基础上再添加一个中间间隔,object 只含有两个指针,分别指向数据成员表和函数成员表,每张表里面也是一系列的slot 分别指向数据成员和函                                         数。

   3  C++对象模型: 1 nonstatic data members 放在class object 内 ,static data members  则放在了静态存储区,static 和nonstatic函数成员也放在了obkect的外面。而对于                                            virtual 函数则有两步控制  vptr->vtbl->virtual fun

      3.1 加上继承:对象模型是如何控制管理继承部分的。

               简单模型是在其一个slot 中有个指针负责指向base class 缺点:增加了object 的空间和存储时间上的负担,优点是其大小不会随base class 改变  通过baseclass table 实现继承会随着继承的深度而增加

           C++最初的继承模型是将base class 的 成员直接放在在derived class 里面。

     小插曲:struct 与class 的冲突 C++里面保留struct是为了兼容C class的到来实现封装 继承 等特性。

三.对象的差异:

     1 程序模型(程序自顶向下)

     2 抽象数据模型(封装)

     3 面向对象模型(继承思想)

四.那么一个object 的大小到底与那些因素有关,如何判断其大小

   1 所有的nonstatic data members +由于要满足机器要求,要调节边界大小使其为某个值的倍数+虚函数或虚继承导致的指针

                   

你可能感兴趣的:(C++,深度搜索C++对象模型)