请大家帮忙解释一下VMT的作用,小弟看书看不大懂. 如标题.多谢大家了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看inside vcl啊,写的很明白的嘛! VMT在OO中作用是极其重要的,研究这个可比较难,老兄还是慢慢看Inside Vcl吧,多看几遍,VMT看懂了,你也许就知道了OO的实现原理 虚拟方法表啊,virtual method table就是记载父类和子类的虚拟方法的一个表格,对于虚拟方法,在delphi里面有virtual和dynamic 2个关键字,virtual记载了父类和子类的所以虚拟方法,因为这样它调用虚拟方法就很快,但是占用内存多啊,因为保存了,子类和父类的所有虚拟方法啊,这样的话,如果继承层次很多的话,那么底层的子类的vmt一定会很大的,为了应付这种毛病,和缺陷,borland发明了dynamic ,动态方法,这个东西的类,只保存自身的vmt,保存自身的虚拟方法,而不保存父类的虚拟方法!!这样虽然节省了内存,但是调用效率慢了一点,因为如果要调用父类的虚拟方法的话,还要向上找寻父类的vmt,不象前面的子类,自己找寻虚拟方法!! 我觉得VMT就是一个数据结构, 就是一个地址链表.通过子类可以跳转到父类的VMT,也就是子类的VMT有父类的VMT的地址. ttoth12(borlander) 说的对,一个类实例在堆上分配空间之后,其前四个字节所存储的,就是一个指向虚拟方法表(VMT)的指针,VMT对子类来说,它除了存储子类的方法(override的和普通的)地址外,还写入了所继承的父类的未被override的方法的入口地址,这种方法好处是调用到父类方法时非常快,缺点是类层深则其越大,内存占用当然也会多;所以Borland又搞出一个动态方法表(DMT),它不会存储父类未被override的方法地址,而在其VMT偏移地址-48处存储一指向其DMT指针,这样若调用父类方法,则要一层一层向上找,效率自不能同VMT比,却节省不少空间,是以其类中不常用之虚方法定义成dynamic是更好,其与virtual各有长短 已知n,d RSA_private_decrypt 怎么解密 求SHA1算法的类 请问在DELPHI中如何区别"¾"与"¼" 如何判断!谢谢!! 可以免费向我索取Object Pascal Reference精简英文全文 开发COM+选择什么开发语言好些 求助算法 菜鸟问题:怎样跳出while/for循环 如何将一个pchar类型赋值给字符数组? xml里面有段内容,这段内容是二进制数据吗?存储到数据库用什么类型? 一个关于线程与MTS的问题!高手请进行! 如何将OleVariant类型数据,转化为字符串??? TActionToolBar设置背景图片
就是记载父类和子类的虚拟方法的一个表格,对于虚拟方法,在delphi里面有virtual和dynamic 2个关键字,virtual记载了父类和子类的所以虚拟方法,因为这样它调用虚拟方法就很快,但是占用内存多啊,因为保存了,子类和父类的所有虚拟方法啊,这样的话,如果继承层次很多的话,那么底层的子类的vmt一定会很大的,为了应付这种毛病,和缺陷,borland发明了dynamic ,动态方法,这个东西的类,只保存自身的vmt,保存自身的虚拟方法,而不保存父类的虚拟方法!!这样虽然节省了内存,但是调用效率慢了一点,因为如果要调用父类的虚拟方法的话,还要向上找寻父类的vmt,不象前面的子类,自己找寻虚拟方法!!