zoukankan      html  css  js  c++  java
  • Inside The C++ Object Model

    前言 - 什么是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函数的次序是未定义的。

  • 相关阅读:
    十大排序算法之选择排序(2)
    十大排序算法之冒泡排序(1)
    2018年年度总结
    敏捷软件开发学习笔记(四)之结构型设计模式
    敏捷软件开发学习笔记(三)之创造型设计模式
    elasticsearch+head+kibana
    闭包函数延迟绑定问题
    初谈dango的post提交csrf设置和文件上传
    浏览器的同源策略,及如可跨域
    socket并发通信的几种方式
  • 原文地址:https://www.cnblogs.com/zxlben/p/3435838.html
Copyright © 2011-2022 走看看