《Inside VCL》中的一个问题(100分)

  • 主题发起人 主题发起人 savetime
  • 开始时间 开始时间
设断点后,运行后ctrl+alt+c,你就看到编译后的汇编代码了。
 
apnl没创建的时候是随便一个值,当然不太可能通过它的值访问到TPanel的VMT,但就据此判断TPanel的VMT没有建立起来,则理由是不充分的。不知道李维在这里怎么解释它。

“因为属于同一Java类的所有对象都是共享一个VMT表格。”这句话比较奇怪,什么时候把Java扯进来了?
 
to xeen,
我明白你的意思,你是说查看 CPU 窗口可以看到相同的调用 TSomeObject.Create 的汇
编代码。这里是一样的,但是这还不够,还不能肯定 TSomeObject.Create 中的工作内容
是一样的。比如有这种可能(只是假设):第一次调用 TSomeObject.Create 时,这个构造
函数内部可能设置了一个标志,表明已经调用过一次了,第二次再执行到此处时可能就不
一样了。(其实 TObject.Create 的内部过程还是蛮复杂的,调用了好几个代码段。)
当然这种情况的可能性极小,作为严谨的考虑,所以我只能说有 95% 的把握。

to Passion,
我也觉得突然冒出个 Java 比较有趣,可能是李维的思维比较发散的原因吧。呵呵。
 
程序载入内存会分为代码段和数据段
我想李维的意思是不是说的数据段?
 
支持楼主的看法,凭直觉知道李维弄错了,
vmt是建立在只读内存中的,是编译时就建立的
不可能后来建立的

哈哈,李维犯错误了,
给李维写个邮件吧
 
来自:qince, 时间:2004-2-10 12:37:00, ID:2445066 | 编辑
》类的vmt内容在第一个类对象创建时才会建立在内存中
我认为是没问题的呀,
savetime兄终于拿到书了?

偶说错了,在此承认错误,VMT在编译期就决定了的。:)
 
应该结论是比较清楚了,谢谢各位的讨论!
 
后退
顶部