当我关闭{$ IMPORTEDDATA}时,是否有真正的性能提升?

the*_*ght 5 memory delphi performance delphi-7 delphi-xe

当我关闭{$ IMPORTEDDATA}时,是否有真正的性能提升?

手册只说明了这一点:"{G-}指令禁止创建导入的数据引用.使用{$ G-}可以提高内存访问效率,但可以防止出现包装单元引用其他包中的变量."


更新:

以下是我可以找到的更多信息:

"调试部分有新选项使用导入数据引用(映射到$ G),它控制导入数据引用的创建(提高内存效率,但阻止访问其他运行时包中定义的全局变量)"

Joh*_*ica 4

几乎从不

该指令仅指从另一个单元访问全局单元变量。

如果您使用{$G+}

unit1;

interface

var
  Global1: integer;   //<--  this is a global var in unit1.
  Form1: TForm1;      //<--  also a global var, but really a pointer
Run Code Online (Sandbox Code Playgroud)

Global1将通过指针间接访问(如果从外部单元1访问时)
Form1也将被间接访问(即从直接指针更改为间接指针)。

如果您使用 {$G-},则对整数的访问global将是直接的,因此速度会稍快一些。

仅当您在另一个单元中和时间关键的代码中使用全局公共单元变量时,这才会产生影响,即几乎从不使用。

请参阅这篇文章:http://hallvards.blogspot.com/2006/09/hack13-access-globals-faster.html

  • Form1 也将被间接访问。Global1和Form1都是内存中包含的4字节数据。无论这 4 个字节的内容表示整数还是指针,访问这 4 个字节数据的方式都是相同的。 (2认同)
  • 我必须承认我没有这样做,因为这违背了我所知道的关于这个问题的一切,我假设了这一点。我刚刚测试了它,并确认表单变量是间接访问的。变量是指针的事实并不会改变您需要访问存储指针的地址才能读取它的事实。变量始终“按地址”访问。这里使用间接的原因是,当变量存储在包中时,exe 代码无法知道包(以及变量)将存储在哪个地址。 (2认同)