【问题标题】:Is there a real performance gain when I turn {$IMPORTEDDATA} off?当我关闭 {$IMPORTEDDATA} 时是否有真正的性能提升?
【发布时间】:2011-09-06 04:58:16
【问题描述】:

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

manual 只说:“{$G-} 指令禁止创建导入的数据引用。使用 {$G-} 可提高内存访问效率,但会阻止出现的打包单元引用其他包。”


更新:

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

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

【问题讨论】:

    标签: performance delphi memory delphi-7 delphi-xe


    【解决方案1】:

    几乎没有

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

    如果你使用 {$G+}

    unit1;
    
    interface
    
    var
      Global1: integer;   //<--  this is a global var in unit1.
      Form1: TForm1;      //<--  also a global var, but really a pointer
    

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

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

    只有当您在另一个单元和时间关键代码中使用全局公共单元变量时,这才会有所作为,即几乎从不。

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

    【讨论】:

    • Form1 也将被间接访问。 Global1 和 Form1 都是内存中包含的 4 个字节的数据。无论这 4 个字节的内容是表示整数还是指针,访问这 4 个字节的数据的方式都是相同的。
    • @Ken 你自己确认了吗?
    • 我需要承认我没有这样做,因为它会违背我所知道的关于这个主题的一切,我假设它。为了它,我刚刚对其进行了测试,并确认间接访问了表单变量。变量是指针这一事实并没有改变您需要访问存储指针的地址才能读取它的事实。变量总是“按地址”访问。此处使用间接的原因是,当变量存储在包中时,exe 代码无法知道包(以及变量)将存储在哪个地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2021-07-08
    相关资源
    最近更新 更多