1.RTTI与VMT的区别(RTTI是类运行时候信息,是一种抽象的称呼吗?)2.VMT是用来保存虚函数指针的,可是不懂得地方在于普通静态函数的指针也是在这个表里面吗?3.类的静态函数 字段的指针 在类的什么地方保存,谢谢大家!

解决方案 »

  1.   

    1.RTTI与VMT是两个概念,我觉得相关性不是很大2、3.VMT顾名思义是虚拟方法表,只保存虚拟方法的指针的。对象有个执行框架,VMT是框架里的其中一部分,而其他变量和方法都保存在框架的其他位置。看看李维的《深入核心VCL架构剖析》吧。
      

  2.   

    这个问题问得很好,盒子上有一个 RTTI 的例子
      

  3.   

    1.RTTI和VMT完全两个风马牛不相及的概念.
    2.VMT可以理解为一个表或者就是一个数组.保存的类的虚方法指针.
    3.如果没有VMT的话.Class和Record在编译后实际上没有什么分别.
      TA = class
        procedure T();
      end;
      从编译后的机器代码看和
      TA = record
      end;
      procedure T(Self : TA);
      是没有分别的.
      静态方法的实现Delphi和C++有区别.Delphi有两种静态方法一种关键字是Class.另一种是2005以后增加的Static  Delphi的Class方法会传进一个隐藏参数Self.这个Self是类(不是实例)
      C++的静态方法编译后和普通的独立方法没有区别.
      Delphi2005以后增加的关键字Static静态方法和C++的静态方法完全一致. 
       
      

  4.   

    楼上的  李维的VCL架构里没说VMT仅仅是保存虚方法的指针的
    还有其他一些信息   运行时类型信息的指针一定也会放在这个里面RTTI是运行时类信息的数据结构,但是我个人认为一定在VMT表里会根据地址偏移可以找到RTTI的指针还有我说的是字段是指针是到底放在什么地方虽然我指针访问字段可能象C语言里的结构类型一样 直接访问但是我要知道具体的这一个机制的实现。
      

  5.   

    零分贴,自然人气不够。VMT名字都有叫了……全是虚方法的
    就好像DMT就是动态方法表你在delphi的帮助里搜索VMT看一下
    它有个Layout的列表,列出了各个偏移值存放的是什么