VCL对象内存分布之虚表指针
2017-01-15 21:48
260 查看
为了探究VCL对象的虚表指针,我们定义了两个类:TBase和TChild,TChild是TBase的子类,TBase有两个虚函数foo和foo1,在TChild里重写了这两个虚函数。
我们创建了一个对象LTom,该对象类型为TChild,从下图可以看到,LTom对象存放在地址为$25333C0的内存上。
我们打开内存查看器,查看地址$25333C0的内存,看到从该地址开始的5-8字节为成员变量FStr字符串所在的内存地址,第9-12字节为FNum的值。
那么$25333C0内存1-4字节存的是什么呢?我们输入这四个字节$0057AD3C,看一看所指的内容,可以看到1-4字节为$0057AFE8,5-8字节$0057B06C,
我们再与对象查看器的内容对比看一下,发现LTom对象的foo和foo1地址正是$0057AFE8和$0057B06C,
由此可知$0057AD3C正是LTom的虚表指针,它指向的内容为TChild类的需方法表(VMT),该表中所存的为每一个指向该类虚方法的指针。
注意:同一类对象的虚表指针都相同。
我们创建了一个对象LTom,该对象类型为TChild,从下图可以看到,LTom对象存放在地址为$25333C0的内存上。
我们打开内存查看器,查看地址$25333C0的内存,看到从该地址开始的5-8字节为成员变量FStr字符串所在的内存地址,第9-12字节为FNum的值。
那么$25333C0内存1-4字节存的是什么呢?我们输入这四个字节$0057AD3C,看一看所指的内容,可以看到1-4字节为$0057AFE8,5-8字节$0057B06C,
我们再与对象查看器的内容对比看一下,发现LTom对象的foo和foo1地址正是$0057AFE8和$0057B06C,
由此可知$0057AD3C正是LTom的虚表指针,它指向的内容为TChild类的需方法表(VMT),该表中所存的为每一个指向该类虚方法的指针。
注意:同一类对象的虚表指针都相同。
相关文章推荐
- c++中的虚函数,虚表指针,及类在内存中的分布
- 关于C++中父类指针引用对象在内存中的分布
- c++对象内存布局(虚表和虚指针)
- VCL对象内存分布之偏移常量
- (Boolan) C++ 类型大小和内存分布(虚函数指针、虚表、内存对齐问题)
- C++内存分布 虚表 虚指针(非常重要)
- c/c++: c++继承 内存分布 虚表 虚指针 (转)
- C++虚拟继承中_对象内存的分布_虚继承会多余分配虚表v-tab的指针vptr_图1-1清楚的描述了虚继承类对象内存的分布_转载淘宝共享数据平台
- C++虚拟继承中对象内存的分布
- 风险指针(Hazard Pointers)——用于无锁对象的安全内存回收机制
- 多重继承及虚继承中对象内存的分布
- 多重继承及虚继承中对象内存的分布
- C++对象的内存分布和虚函数表
- 虚基类、虚函数,对象内存分布
- 虚基类、虚函数,对象内存分布
- Windbg技巧: 利用C++类对象的虚拟函数表指针在内存中搜索对象
- MyC++之类对象内存分布
- 虚基类、虚函数,对象内存分布
- 关于C++的类对象,内存分布问题
- 多重继承及虚继承中对象内存的分布