码迷,mamicode.com
首页 > 编程语言 > 详细

深度探索C++对象模型

时间:2014-07-21 14:30:10      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:数据   io   cti   c   c++   时间   

著:Stanley B. Lippman  侯捷译  Inside the C++ Object Model

第一章:关于对象(Object Lessons)

C++对象模型,了解到也是一个演变的过程,C++对象中包含了以下内容:(data members) non-static data,static data(const),以及(member functions):static,non-static,virtual

发展的主要过程主要集中于如何存储data 和 function,寻求时间和空间的最高效;

第一种模型 简单对象模型,A Simple Object Model

把所有的data和function的地址存储在class中(即都是pointer-to-member),相对比较灵活,class大小固定,间接引用;但由于间接引用会带来访问时间开销;

而object生成中只需要指向base class即可,并对相应数据指针覆盖即可; (总结:把所有的data和function都以virtual的形式间接访问,缺点data对象带来访问开销)

第二种模型:表格驱动对象模型 A Table-driven Object Model

在第一种模型基础上改进,将data member和function member放到独立的table中,这样在class中仅需要保存两个ptr即可,减少了空间。没有实际应用,但member function table被应用virtual functions设计中;

第三种: C++对象模型  The C++ Object Model

吸收上两种模型的精华,对内存空间和存取时间做了优化,对class中各种类型进行了差异性处理。分别如下:object中仅存储non-static data和一个vptr指针,该指针指向一个vtable(包含所有的虚拟函数指针), static-data 和 function 独立于对象存在。

可以支持单继承和多重继承,virtual可以在多重继承中共享继承,仅保留父类的一份对象空间。

优势:data member通过直接访问,提高访问时间

缺点: base class members的任何改变,都会影响到derived class members。

深度探索C++对象模型,布布扣,bubuko.com

深度探索C++对象模型

标签:数据   io   cti   c   c++   时间   

原文地址:http://www.cnblogs.com/purejade/p/3858054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!