当您将函数标记为inline
时,您提示编译器此函数是内联的候选函数。编译器仍然可以确定它不是一个好主意,并忽略它。
有没有办法在不使用反汇编程序的情况下查看函数是否内联? 是否有一些我不知道的编译器警告?
编译器使用的内联规则是什么?是否存在导致函数永远不会内联的结构?
答案 0 :(得分:6)
如果编译器无法内联您的函数,则会发出提示。 documentation解释了可以和不可内联的规则。
关于编译器是否内联的决定性决定(与是否可以内联相对),它们没有记录,可以被视为实现细节。
我记得你最近commented就我对一个不同问题的一个答案表示,一旦内联,特定功能的速度提高了10倍。显然,你对内联感兴趣,但在这种特殊情况下,我无法相信具有如此多浮点运算的函数的巨大收益。我怀疑内联实际上并没有为您提供您认为的性能改进。
答案 1 :(得分:2)
在构建项目后,您可以查看装订线中的蓝点。如果函数旁边有蓝点,则至少没有内联一次。
我认为你不能依赖编译器发出的提示。它会告诉您何时没有内联,因为函数所在的文件不在interface uses子句中。如果是因为其他原因通常不会告诉你。