成员函数之前的大小通常没有内联

How big before a member function typically not inlined?

本文关键字:常没 函数 成员      更新时间:2023-10-16

在编译器决定不内联成员函数之前,成员函数需要多大?

(假设GCC和o2/o3或任何其他高优化开关)。

我认为函数越大,内联的好处就越小。

内联的主要目的之一是避免函数调用和返回的开销。

小函数,如getter和setter,是主要的候选函数。

较大的函数通常不内联。这是由于数据处理指令与调用和返回开销的大小之比。与函数中的内容相比,开销很小。一般来说,删除函数调用和返回开销对程序性能的影响可以忽略不计。

至于大小阈值,它取决于编译器。对于GCC,您应该查阅文档或查看代码中的决策点。

gcc inline的默认阈值大小是600。你可以通过标记-finline-limit

来改变它

注意函数大小的度量不是直接以字节或指令计数计算的,而是由编译器应用的其他度量,这使得很难确定函数是否内联。您可以假设基于函数对特定-finline-limit值的内联性,其他大小的函数对标志的其他值的内联性。

然而,大小本身并不能保证内联,并且决定可能因其他标志/编译器版本而异。

这种混乱有一个很好的原因:因为内联主要是由于性能,编译器调整它的测量目标架构/函数的使用。


源:

GCC优化选项