详细介绍 c++中的类对象内存模型
内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计
算机系统中将变量存储到内存和从内存取出变量这样的低层细节.不同平台间的处理器架构
将直接影响内存模型的结构.
首先介绍一下C++中有继承关系的类对象内存的布局:
在C++中,如果类中有虚函数,那么它就会有一个虚函数
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
的指针__vfptr,在类对象最
开始的内存数据中。之后是类中的成员变量的内存数据。
对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变
量)。之后是子类自己的成员变量数据。
对于子类的子类,也是同样的原理。但是无论继承了多少个子类,对象中始终只有一个
虚函数表指针。
为了探讨 C++类对象的内存布局,先来写几个类和函数
首先写一个基类:
然后,我们多种不同的继承情况来研究子类的内存对象结构。
1. 无虚函数集继承
这个子类 Child1 没有继承任何一个基类的虚函数,因此它的虚函数表如下图:
我们可以看出,子类的虚函数表中,先存放基类的虚函数,在存放子类自己的虚函数。
2. 有一个虚函数继承
当子类重载了父类的虚函数,则编译器会将子类虚函数表中对应的父类的虚函数替换成
子类的函数。
3. 全部虚函数都继承
4. 多重继承
多重继承,即类有多个父类,这种情况下的子类的内存结构和单一继承有所不同。
我们可以看到,当子类继承了多个父类,那么子类的内存结构是这样的:
子类的内存中,顺序
5. 菱形继承