单层需继承的内存图(VC6.0)
来源:互联网 发布:大螺距螺纹编程实例 编辑:程序博客网 时间:2024/05/18 00:37
继承关系图
class A{virtual aa(){};};class B : public virtual A{char j[3];//加入一个变量是为了看清楚class中的vfptr放在什么位置public:virtual bb(){};};class C : public B{char i[3];public:virtual cc(){};};#include <iostream>using namespace std;int main(){A aa;int a = sizeof(aa);B bb;int b = sizeof(bb);C cc;int c = sizeof(cc);printf("a= %d\nb=%d\nc=%d\n",a,b,c);return 0;}
下面是内存图
集体的单步调试内存图如下
图一 单层虚继承刚到aa时的图
图二 单层继承aa运行完之后的图
从图一可以看出,变量在内存的位置都定下来了(例如bb.j、cc.i、cc.B.j,还有与类无关的a、b、c三个变量),与虚函数有关的aa._vfptr、bb._vfptr等的内存值还是空的(0xcccccccc)然后到了图二就可以看出aa._vfptr的值就确定了,这说明虚函数表指针(vptr)在运行时才确定真正的值。
图三 单层虚继承刚到bb时的图
图四 单层继承bb运行完之后的图
图三与图四的比较可以看出,虚函数指针_vfptr或者vptr在运行时才确定,同样指向virtual base class的类的偏移或者指针也是在运行时确定。
图五 单层虚继承刚到aa时的图
图六 单层继承aa运行完之后的图
图七 虚函数表
虚函数表在程序代码之后,中间以四个字节的0隔开。
- 单层需继承的内存图(VC6.0)
- 虚拟继承内存调试(VC6.0)
- VC6的内存对齐
- vc6.0内存泄露
- vc6.0平台下两个mfc界面的内存共用(2)
- VC6.0内存泄露检测工具
- VC6.0内存泄露检测工具
- VC6.0内存泄露检测工具
- VC6.0内存泄露检测工具
- 关于VC6.0下内存泄露的监测
- vc6.0平台下两个mfc界面的内存共用
- 多重继承虚基类 vc6.0编译通过
- (转载)虚继承之单继承的内存布局
- 类(继承)的内存分配详解
- 继承的内存问题
- 单层卷积神经网络的实现
- 输出树的单层节点
- MFC的CString(VC6) 内存管理分析
- Android教程(十二)-- 使用DisplayMetrics获取手机分辨率
- 二叉树C++ Version
- linux没有 eth0
- [4月30日的脚本] 在Windows 8中使用脚本安装.NET Framework 3.5 (PowerShell)
- 利用jQuery实现全选、反选、删除和添加
- 单层需继承的内存图(VC6.0)
- SPRING.NET 1.3.2 学习26--容器扩展点
- 算法题目一:全排列(C++实现)
- [Django1.5]'url' requires a non-empty first argument. 错误
- 野指针
- Tomcat 报“ IOException while loading persisted sessions:”异常解决方法
- 将Flash 嵌入WPF 程序
- C++ name mangling
- HTML代码用例