关闭

深度探索C++对象模型(1)

标签: C++对象
236人阅读 评论(0) 收藏 举报
分类:

没错。。。就是这么爱读书的一只我(我会说是我买多了然后不看觉得可惜吗。。。),但是这本书倒确实是老师一直推荐让看。。。

template <class type,int dim>//重载输出流,我用的不是很熟练刚好看到,温习一下

{

  os<<"(";

  for(int ix = 0;ix <dim-1;++ix)

  {

      os<<pt[ix]<<",";

   }

   os<<pt[dim-1];

   os<<")";

}


关于C++加上封装后的布局成本:

关于非静态数据成员直接内含在每一个class object之中

而对于成员函数,虽然含在class的声明之内,却不出现在object(对象)之中,每一个non-inline成员函数只会诞生一个函数实例

每一个"拥有一个或者一个定义"的inline function则会在其每一个使用者(模块)身上产生一个函数实例。

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

virtual function机制: 用以支持一个有效率的"执行期绑定"

virtual base class:    用以实现"多次出现在继承体系中的base class,有一个单一而被共享的实例"。


1.1C++对象模式

两种类数据成员:

static:存放在个别的类对象之外

nonstatic:存放在每一个类对象之内

三种类成员函数:

static:个别的类对象之外

nonstatic:个别类对象之外

virtual:

(1)每一个class产生出一堆只想虚函数的指针放在表格中,表格缩写vtbl

(2)每一个类对象被安插一个指针,指向相关的虚表,指针缩写vptr,指针的设定和重置都有每一个类的构造拷贝或者析构自动完成,每一个class关联的type_info(具体实现方式依照编译器而定) object也经由virtual table被指出来,通常放在表格第一个地址。


在简单对象模型中,每一个base class可以被derived class object内的一个slot指出,该slot内含类的基类的子对象的地址,缺点是因为间接性会导致空间和存取时间上的额外负担,优点是class object的大小不会因为base classes的改变而受到影响。


C++凡是处于同一个access section的数据,必定保证以其声顺序出现在内存布局当中。

P22




0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

来源:http://dsqiu.iteye.com/blog/1669614 之前一直对C++内部的原理的完全空白,然后找到《Inside The C++ Object Model》...
  • freeking101
  • freeking101
  • 2017-03-03 14:52
  • 1677

《深度探索C++对象模型》读书笔记——关于对象【for_wind】

//整理之,分享之,欢迎指正。for_wind 1、C与C++的区别:       概括来说,C程序中程序性地使用全局数据[注1]。而C++采用ADT(abstract data tpye)或...
  • for_wind
  • for_wind
  • 2014-03-28 14:08
  • 1383

深度探索C++对象内存模型

前面简单的论述过C++对象模型,总觉得不够深入,现近闲来进一步挖掘C++对象内存布局情况。主要讨论:单一继承,多重继承,钻石继承的有无虚函数以及虚拟继承的情况。贴出测试程序,并给出测试结论以及对应的类...
  • yeswenqian
  • yeswenqian
  • 2014-11-14 21:48
  • 1167

深度探索c++对象模型(侯捷)part1

  • 2010-05-18 16:31
  • 3.91MB
  • 下载

inside the c++ model 深度探索C++对象模型.part1.rar(中文版)

  • 2007-10-12 11:21
  • 2.67MB
  • 下载

深度探索C++对象模型【第三章1】

1:编译器会为每一个空class安插一个char,使得这个class的两个objects对象在内存中配置独一无二的内存地址。这就解释了空类的大小为何为1(即使该类为派生类,也需要为其安插一个char来...
  • misayaaaaa
  • misayaaaaa
  • 2017-11-05 09:28
  • 136

深度探索C++ 对象模型【第二章1】

1:在C++的构造函数上,往往编译器会做很多你不知道的事,就比如说构造函数的隐式转换,虽然有时候很方便,但是在某些情况下会造成一些意想不到的情况发生,explict关键词就因此而生~! 2:当编译器需...
  • misayaaaaa
  • misayaaaaa
  • 2017-11-04 09:00
  • 345

深度探索C++ 对象模型【第七章1】

1:template编程风格 它是标准模板库(STL)的基础参数化技术 2:template类,定义一个指针指向特定的实例时,程序中并没有发生什么,因为指针并不是对象,编译器不需要知道与该clas...
  • misayaaaaa
  • misayaaaaa
  • 2017-11-13 09:23
  • 275

深度探索C++ 对象模型【第一章1】

几个值得注意的点: 1:在C语言中,数据和处理数据的操作(函数)是分开声明的。C语言本身没有支持“函数与数据”之间的关联性。这种程序方法叫做程序性,算法函数处理的是外部的数据。 2:在C++中,我...
  • misayaaaaa
  • misayaaaaa
  • 2017-10-24 22:42
  • 146

《深度探索C++对象模型》读书笔记(1)仅含前四章

1.C++对虚拟基类的支持会导致一点额外的负担,具体实现是在派生类对象中使用一个指针来指向对应的虚拟基类,这个指针指向一个表格,表格存放的是引导访问虚拟基类子对象的信息,例如其在派生类对象中的偏移量或...
  • love_Irving2
  • love_Irving2
  • 2017-06-02 13:19
  • 209
    个人资料
    • 访问:63631次
    • 积分:2485
    • 等级:
    • 排名:第17103名
    • 原创:191篇
    • 转载:4篇
    • 译文:0篇
    • 评论:9条
    最新评论