【发布时间】:2009-07-22 12:24:03
【问题描述】:
谁能说说delphi中inline关键字的用途
【问题讨论】:
标签: delphi
谁能说说delphi中inline关键字的用途
【问题讨论】:
标签: delphi
这是对编译器的一个提示,即函数/过程应该(如果可能的话)内联,即当你调用它时,它应该像宏一样扩展而不是被调用。
这是对调用开销很大的(非常)小的函数的优化。您会在例如 windows.pas 中找到许多示例
实际发生的情况取决于函数的复杂性、公共/私人访问权限和您的 Delphi 版本。
【讨论】:
Borland Delphi Version 15.0 编译单元,但找不到内联指令。
它告诉编译器在调用它的地方为 inline; 例程生成代码,而不是跳转到例程并返回。
对于转换为非常短的汇编程序的过程,这可能对性能有好处,因为与参数准备、实际调用和过程序言/结尾相比,实际代码相对较短。
如果过程太长,它可能会影响性能,并极大地破坏您的代码。 “自动”设置应该为您做出这个决定,但在特定情况下,您可以在本地将 {$inline 设置为 on 以强制它。 (例如,对于转换为 pascal 函数的 C 宏,例如用于处理比特流的 zlib 函数)
【讨论】:
其他人已经回答了 inline 的作用,但我只想指出,有一个编译器选项可以将 inline 设置为开、关或自动。查看 D2009 文档中的“调用过程和函数”以获得对内联机制的非常好的解释。这是在线文档的链接:
【讨论】:
Within a unit, the body for an inline function should be defined before calls to the function are made. Otherwise, the body of the function, which is not known to the compiler when it reaches the call site, cannot be expanded inline. 那个救了我的人。
它是从 C 中借来的,它告诉编译器这是一个经常被调用的短例程,它建议编译器将函数视为宏,并在调用点将函数代码直接集成到程序中,而不是使用函数调用。
这提供了更快的代码,因为没有函数调用开销,但是以更大的程序为代价。还要注意,就像在 C 中一样,这是对编译器的建议,它实际上不必这样做,优化器可能会覆盖你。
在哪里执行此操作?就像循环展开一样,它是一种如今很少使用的技术。使用它的经典地方是嵌套结构的深处,该结构对实时至关重要,例如在图形应用程序中渲染代码,在每次迭代中减少一些机器调用可以提高屏幕刷新率。
【讨论】:
在 Delphi 中调试时按 Ctrl + Alt + C(整个 CPU 调试窗口),然后调用内联函数。你会看到内联函数在没有“调用”的情况下开始并跳转到另一个地址。它的优化功能。
【讨论】: