我怎么知道Delphi函数是否会被内联?

Wou*_*ick 6 delphi inline compiler-warnings

当您将函数标记inline为时,您提示编译器此函数是内联的候选函数.编译器仍然可以确定它不是一个好主意,并忽略它.

  1. 有没有办法在不使用反汇编程序的情况下查看函数是否内联?是否有一些我不知道的编译器警告?

  2. 内联编译器使用的规则是什么?是否存在导致函数永远不会被内联的结构?

Dav*_*nan 7

如果编译器无法内联您的函数,则会发出提示.该文档解释了可以和不可内联的规则.

至于编译器关于是否内联的自由决定(与是否可以内联相对),它们没有记录,可以被视为实现细节.

我记得你最近评论过我对一个不同问题的一个答案,即一次内联时特定功能的速度提高了10倍.显然,你对内联感兴趣,但在这种特殊情况下,我无法相信具有如此多浮点运算的函数的巨大收益.我怀疑内联实际上并没有为您提供您认为的性能改进.

  • @Wouter:在这种情况下将零作为参数传递使得优化器将表达式简化为"abs(0)<tolerance",其运行速度比原始代码快.此外,当计时功能没有副作用时,使用返回值(通过分配全局变量)非常重要,否则代码可能会被完全优化掉. (2认同)