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

来源:互联网 发布:网络推广经理职责 编辑:程序博客网 时间:2024/05/29 13:21

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


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

0 0
原创粉丝点击