双点..在Delphi Map文件中
发布时间:2020-12-15 04:34:23 所属栏目:大数据 来源:网络整理
导读:我一直在检查Delphi生成的Map文件,我在那里发现了一件奇怪的事情.标识符用双点分隔而不是单个点. 例如MapFile..TFoo取自简单的例子 program MapFile;{$APPTYPE CONSOLE}{$R *.res}type TFoo = class(TObject) public function GetFoo: string; end;function
我一直在检查Delphi生成的Map文件,我在那里发现了一件奇怪的事情.标识符用双点分隔而不是单个点.
例如MapFile..TFoo取自简单的例子 program MapFile; {$APPTYPE CONSOLE} {$R *.res} type TFoo = class(TObject) public function GetFoo: string; end; function TFoo.GetFoo: string; begin Result := 'foo'; end; var foo: TFoo; begin foo := TFoo.Create; writeln(foo.GetFoo); foo.Free; end. 及其公共地图文件 Address Publics by Name 0001:00005AC8 MapFile..TFoo 0001:00005BBC MapFile.Finalization 0004:00002BA0 MapFile.foo 0002:000000BC MapFile.MapFile 0001:00005B88 MapFile.TFoo.GetFoo 0001:000059D0 SysInit... 0001:000059C0 SysInit... 0001:00005AA8 SysInit... 0001:000059B0 SysInit... 0001:00005A98 SysInit... 0001:00005A74 SysInit... 0003:000007D8 SysInit... 0001:000059A0 SysInit... 0001:000059E0 SysInit... 0001:000059F0 SysInit... 0001:00005A04 SysInit... 0001:00005A34 SysInit... 0001:00005A4C SysInit... 0004:00002B98 SysInit..1 我最好的猜测是MapFile..TFoo是一个类,但为什么要加倍?什么是SysInit..1据我所知,Delphi没有匿名课程. 解决方法
“..”条目是对类类型的引用,或者更准确地说是类的VMT.生成符号是因为链接器在将v-table祖先链接在一起时需要识别它并用于链接运行时类型信息.
编译器生成的符号不能由用户的代码生成.这确保了符号始终是唯一的并且永远不会发生碰撞.甚至临时变量也会在符号表中获得特殊名称和条目. mapfile / debug info生成会主动跳过或忽略它们,但它们就在那里. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |