前言 - 什么是C++对象模型

C++对象模型包括2个方面的含义:

1.语言中直接支持面向对象程序设计的部分

2.对于各种(面向对象)支持的底层实现机制。

无论是什么语言,都需要转换为汇编。很多面向对象特性不是汇编所原生支持的,这也许是C和C++区别最大的地方吧。

在C中大部分语言层面的机制都可以得到汇编的支持,例如函数调用,循环,条件转移,指针等等...

在C++中,很多特性不被汇编语言所支持,例如继承,虚函数,运算符重载,构造函数等。所以需要提供一种实现机制,

将这些特性转换为实实在在的汇编代码。

关于"不变量"

在C++对象模型的实现过程中,是需要有一些不变量存在的。有一些东西必须在 编译期间就固定下来。例如虚函数实现的

虚函数表,在运行时是不允许修改的(这有别于一些动态类型的语言或者脚本),这些“不变量”使得虚拟函数调用更加快速,

但是带来的成本是执行期间的弹性。

关于本书的目的:

1.解释C++底层机制,让程序员能写出效率更高的代码

2.消除人们对C++的误解

关于静态初始化的例子:

对于静态初始化有2种方式:munch、patch。

所谓monch方式:书中的流程:CC产生一个可执行文件->用NM导出符号->寻找sti开头的函数,插入main的头部,产生一个新的C文件,调用这些符号->编译新的.c

patch方式:针对coff格式,直接修改可执行文件。

这些sti函数的次序是未定义的。

Inside The C++ Object Model - 02的更多相关文章

  1. C++学习书籍推荐《Inside the C++ Object Model》下载

    百度云及其他网盘下载地址:点我 作者简介 Stanley B. Lippman is Architect with the Visual C++ development team at Microso ...

  2. inside the C++ Object model总结

    一. 关于对象 1.内联函数:能够除去函数调用的开支,每一处内联函数的调用都是代码的复制.这是一种空间换取时间的做法,若函数代码量大或者有循环的情况下,不宜内联(这件事有些编译器会自动帮你做).在类中 ...

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

    转载:http://dsqiu.iteye.com/blog/1669614 第一章 关于对象 使用class封装之后的布局成本: class并没有增加成本,data members直接内含在每一个c ...

  4. Inside The C++ Object Model - 03

    object Lessons 1.C++中布局以及存取时间上的的额外负担是由virtual引起的:virtual function.virtual base class.或是由于多继承引起的. 2.C ...

  5. Inside The C++ Object Model(五)

    ============================================================================5-0. 一般而言,class 的data me ...

  6. Inside The C++ Object Model(四)

    ============================================================================4-1. Member 的各种调用方式静态成员函 ...

  7. Inside The C++ Object Model(三)

    ============================================================================3-0. 类所占的内存大小受到三个因素的影响:( ...

  8. Inside The C++ Object Model(二)

    ============================================================================2-0. 关键字explicit被引入C++,提 ...

  9. Inside The C++ Object Model(一)

    ============================================================================1-1. 关键字struct和class的一点区 ...

随机推荐

  1. 【Android】配置APK开发环境

    1.安装java jdk去oracle公司下载jdk-7u15-windows-i586.exehttp://www.oracle.com/technetwork/cn/java/javase/dow ...

  2. php轮流排序,每隔一定的时间轮流进行位置排序,轮询的排行榜:function dataPollingInterval()

    /* * @名称: php ,对数组每隔一定的时间(自设定时间)来轮流进行位置排序,轮询的排行榜. 精确到指定的秒 或 分钟 或 小时 或 天 ,对数据列表进行轮排. * @参数: (array)$l ...

  3. LintCode Maximum Depth of Binary Tree

    1 /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, ...

  4. dpkg ---- apt-get ------ aptitude 三种方式的区别 及命令格式

    转自:http://blog.csdn.net/xiaoyanghuaban/article/details/22946987 dpkg绕过apt包管理数据库对软件包进行操作,所以你用dpkg安装过的 ...

  5. Java常用正则表达式验证工具类RegexUtils.java

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexUtils{ /** * 正则表达式 ...

  6. 转:配置nodemanager启动weblogic服务器

    下面仅供参考,里面表格还有文件目录我是写的linux,刚刚看到原作者是windows, 后面我会把自己配置nodemanager的经过记录上来,我搞得是linux. (一)通过nodemanager本 ...

  7. Toolkit.getImage获取图片

    public class Img { private static final Toolkit tk = Toolkit.getDefaultToolkit(); public static fina ...

  8. NodeJS的小应用

    server.js: //引入require 模块 var http=require('http'); //创建服务器 http.createServer(function(request,respo ...

  9. css中的浮动以及清除浮动

    对于css中的浮动问题,曾经有一段时间我是懵懵懂懂的感觉,对于float这个属性一直是似懂非懂的赶脚,对于这种让我们一直懵懵懂懂的知识点,我们就需要找个时间点,仔仔细细的去将它搞懂,从这个过程中我们也 ...

  10. CAD的API们

    AutoCAD有4种API,.net,lisp,activex和ObjectARX(C++).它们都是用来给cad写插件什么的,依赖cad运行. 另有一个RealDWG SDK,这是用来读写dwg或d ...