深度探索C++对象模型之C++对象模型笔记
0.菜鸟觉得,在看这本书的时候最好切换角色,把自己的思维转换成编译器开发者,去考虑问题,这样会容易理解些.(当然这样很难,就想着自己要解决什么样的问题好了)
1.在C++中,类的数据成员有两种:静态和非静态;成员函数有三种:静态,非静态 ,虚函数。(之所以这样分,大概是因为在设计c++对象模型时,非静态的数据成员表现出来的问题属于同一类)。
2.对象模型的发展
2.1简单对象模型
这个模型中一个类对象就像是一维指针类型数组,按照类成员的声明顺序依次指向在该成员在内存中的虚拟地址。
2.2表格驱动模型
这种模型把所有的成员信息抽出来,放在一个数据成员表和一个成员函数表之中,类对象本身则含指向这个两个表格的指针。
2.3C++对象模型
这种模型中,非静态数据成员被配置于每一个类对象之内,静态数据成员则被放在所有类对象之外,静态和非静态成员函数也被放在所有的类对象之外,对于虚函数则通过以下两个步骤来支持:
1.每一个类产生出一堆指向虚函数的指针,放在表格中,即虚函数表(vtbl).
2.每一个类对象被添加了一个指针,指向相关的虚函数表,这个指针被叫做vptr.vptr的设定和重置都由每一个类的构造函数,析构函数,赋值运算符自动完成(具体实现后面再讲)。每一个类所关联的type info object(用来支持RTTI运行时类型识别)也经由虚函数表指出来,通常是放在表格的第一行。
2.4加上继承后的对象模型
C++支持单一继承,和多重继承,多重继承就会引发同基类二义性问题,这个时候应采用虚基类 virtual继承方式.
base table(基类表)模型
1、基类表被产生出来时,表格中的每一个slot(行)内含一个相关的基类地址,这点类似于虚函数表内含每一个虚函数地址一样。
2、每一个类对象内含一个指向基类的指针bptr,它会被初始化,指向其基类表
这种模型的缺点在于由于间接性而导致的空间和存取时间上的额外负担,优点在于每一个类对象中对于继承都有一致的表现形式:每个类对象都应该在某个固定位置上安放一个基类指针,于基类的大小或数目无关
版权声明:本文为博主原创文章,未经博主允许不得转载。
深度探索C++对象模型之C++对象模型笔记的更多相关文章
- 读书笔记《深度探索c++对象模型》 概述
<深度探索c++对象模型>这本书是我工作一段时间后想更深入了解C++的底层实现知识,如内存布局.模型.内存大小.继承.虚函数表等而阅读的:此外在很多面试或者工作中,对底层的知识的足够了解也 ...
- 《深度探索C++对象模型》读书笔记(一)
前言 今年中下旬就要找工作了,我计划从现在就开始准备一些面试中会问到的基础知识,包括C++.操作系统.计算机网络.算法和数据结构等.C++就先从这本<深度探索C++对象模型>开始.不同于& ...
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
转载:http://dsqiu.iteye.com/blog/1669614 第一章 关于对象 使用class封装之后的布局成本: class并没有增加成本,data members直接内含在每一个c ...
- [读书系列] 深度探索C++对象模型 初读
2012年底-2014年初这段时间主要用C++做手游开发,时隔3年,重新拿起<深度探索C++对象模型>这本书,感觉生疏了很多,如果按前阵子的生疏度来说,现在不借助Visual Studio ...
- 深度探索C++对象模型
深度探索C++对象模型 什么是C++对象模型: 语言中直接支持面向对象程序设计的部分. 对于各个支持的底层实现机制. 抽象性与实际性之间找出平衡点, 需要知识, 经验以及许多思考. 导读 这本书是C+ ...
- 柔性数组-读《深度探索C++对象模型》有感 (转载)
最近在看<深度探索C++对象模型>,对于Struct的用法中,发现有一些地方值得我们借鉴的地方,特此和大家分享一下,此间内容包含了网上搜集的一些资料,同时感谢提供这些信息的作者. 原文如下 ...
- 柔性数组-读《深度探索C++对象模型》有感
最近在看<深度探索C++对象模型>,对于Struct的用法中,发现有一些地方值得我们借鉴的地方,特此和大家分享一下,此间内容包含了网上搜集的一些资料,同时感谢提供这些信息的作者. 原文如下 ...
- 拾遗与填坑《深度探索C++对象模型》3.3节
<深度探索C++对象模型>是一本好书,该书作者也是<C++ Primer>的作者,一位绝对的C++大师.诚然该书中也有多多少少的错误一直为人所诟病,但这仍然不妨碍称其为一本好书 ...
- 拾遗与填坑《深度探索C++对象模型》3.2节
<深度探索C++对象模型>是一本好书,该书作者也是<C++ Primer>的作者,一位绝对的C++大师.诚然该书中也有多多少少的错误一直为人所诟病,但这仍然不妨碍称其为一本好书 ...
- c++学习书籍推荐《深度探索C++对象模型》下载
百度云及其他网盘下载地址:点我 百度云及其他网盘下载地址:点我 编辑推荐 如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么这本<深度探索C++对象模型>正适合你 作者简介 ...
随机推荐
- mysql连接失败或出现“Too many connections”错误
mysql连接失败或出现"Too many connections"错误 # 按自己服务器的配置文件路径修改 vi /etc/my.cnf 查找:max_connections 修 ...
- linux/windows平台生成随机数的不同方法
linux平台,使用rand.Seed() //rand_linux.go package main import ( "math/rand" "time" ) ...
- 给Cygwin重新安装curl
之前已经安装过了cygwin了,但是重装了系统了. 不过发现cygwin倒是还可以继续使用. 现在想要使用其中的curl工具. 但是却在cygwin安装目录 E:\dev_install_root\c ...
- [DP之计数DP]
其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...
- delphi变量作用域
完全摘自网络(一件飘雪),供参考: 很多初学者对delphi单元的变量和函数访问权限不理解,在此我举例说明,希望初学者看此文后能茅塞顿开. delphi单元的变量和函数访问权限问题如下两个单元描述: ...
- 【APP测试初体验】android测试命令----adb常用命令
--adb shell 命令adb devices 查看设备adb shell adb shell "ls -al /system/bin" >e:\a.txtsample_ ...
- 一个3D视频播放器的演示APK
介绍: 这个APK是把视频显示分割成左右对等的两幅画面.同时无缝显示在屏幕上, 配合类似谷歌的cartdboard "纸片壳" 或市面上的魔镜等3D眼镜来播放视频画面, 根据3D眼 ...
- 为 ngui TweenPosition 添加 pingpongone
//---------------------------------------------- // NGUI: Next-Gen UI kit // Copyright © 2011-2015 T ...
- C++编程技巧(长期更新)
1.数组使用 int* p = new int[5](); // 数组新建并全部初始化为0 等价于: int* p; p = new int[5](); int* q = new int[5]; ...
- centos6.5安装python3
1.安装环境 #yum install gcc yum install zlib-devel yum install make 2.下载python版本 #wget http://www.python ...