gpt4 book ai didi

delphi - Delphi map 文件中的双点 ..

转载 作者:行者123 更新时间:2023-12-03 14:59:53 26 4
gpt4 key购买 nike

我一直在检查 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.

及其公共(public) map 文件

  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 表祖先链接在一起以及链接运行时类型信息时需要识别它。

编译器生成用户代码无法生成的符号。这确保了符号始终是唯一的并且永远不会发生冲突。即使是临时变量也会有一个特殊的名称和符号表中的一个条目。它们会被映射文件/调试信息生成主动跳过或忽略,但它们确实存在。

关于delphi - Delphi map 文件中的双点 ..,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36472752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com