您的位置:首页 > 其它

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),该表中所存的为每一个指向该类虚方法的指针。

注意:同一类对象的虚表指针都相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息