VCL对象内存分布之虚表指针

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


注意:同一类对象的虚表指针都相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值