C++对象模型
来源:互联网 发布:手机熊猫 网络设置 编辑:程序博客网 时间:2024/06/01 08:29
前言
对C++对象的内存布局、虚表指针、虚基类指针等进行深入解析。本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。
何为C++对象模型
引用《深度探索C++对象模型》这本书中的话:
有两个概念可以解释C++对象模型 1. 语言中直接支持面向对象程序设计的部分。 2. 对于各种支持的底层实现机制。
直接支持面向对象程序设计,包括了构造函数、析构函数、多态、虚函数等等,这些内容在很多书籍上都有讨论,也是C++最被人熟知的地方(特性)。而对象模型的底层实现机制却是很少有书籍讨论的。对象模型的底层实现机制并未标准化,不同的编译器有一定的自由来设计对象模型的实现细节。在我看来,对象模型研究的是对象在存储上的空间与时间上的更优,并对C++面向对象技术加以支持,如以虚指针、虚表机制支持多态特性。
文章内容简介
这篇文章主要来讨论C++对象在内存中的布局,属于第二个概念的研究范畴。而C++直接支持面向对象程序设计部分则不多讲。文章主要内容如下:
- 虚函数表解析。含有虚函数或其父类含有虚函数的类,编译器都会为其添加一个虚函数表,vptr,先了解虚函数表的构成,有助对C++对象模型的理解。
- 虚基类表解析。虚继承产生虚基类表(vbptr),虚基类表的内容与虚函数表完全不同,我们将在讲解虚继承时介绍虚函数表。
- 对象模型概述:介绍简单对象模型、表格驱动对象模型,以及非继承情况下的C++对象模型。
- 继承下的C++对象模型。分析C++类对象在下面情形中的内存布局:
- 单继承:子类单一继承自父类,分析了子类重写父类虚函数、子类定义了新的虚函数情况下子类对象内存布局。
- 多继承:子类继承于多个父类,分析了子类重写父类虚函数、子类定义了新的虚函数情况下子类对象内存布局,同时分析了非虚继承下的菱形继承。
- 虚继承:分析了单一继承下的虚继承、多重基层下的虚继承、重复继承下的虚继承。
- 理解对象的内存布局之后,我们可以分析一些问题:
- C++封装带来的布局成本是多大?
- 由空类组成的继承层次中,每个类对象的大小是多大?
至于其他与内存有关的知识,我假设大家都有一定的了解,如内存对齐,指针操作等。本文初看可能晦涩难懂,要求读者有一定的C++基础,对概念一有一定的掌握。
【原文】图说C++对象模型:对象内存布局详解
阅读全文
0 0
- Objective-C对象模型
- Objective-C对象模型
- objective C 对象模型
- C ++ 对象模型
- Objective-C 对象模型
- 【C++】对象模型
- Objective-C对象模型
- C/C++的对象模型
- Objective-C的对象模型
- 图解Objectvie-C对象模型
- C/C++的对象模型
- Objective-C对象模型--类对象和元类对象
- 深度探索C++对象模型
- Objective-C 对象和消息模型
- Objective-C对象模型及应用
- Objective-C对象模型及应用
- Objective-C对象模型及应用
- Objective-C对象模型及应用
- python 学习--99乘法表
- 第七周项目四
- 让你了解操作系统基本概念
- UML类图与类的关系详解
- springMVC
- C++对象模型
- js中a标签的href属性不跳转方法
- html元素抓换
- CUDA学习笔记(4)光线追踪(常量内存)
- Codeforces 873D. Merge Sort 分治 + 构造
- JDK7中Lock源码概述
- centOS7安装Apache
- 探究 Java 虚拟机栈
- JSF原理介绍