GCC在编译C ++代码时是否尝试通过选择未标记inline
关键字的内联函数来优化速度?
答案 0 :(得分:35)
是。任何编译器都可以随意内联任何函数,只要它认为这是一个好主意。海湾合作委员会也这样做。
在-O2优化级别,当编译器认为值得做(使用启发式)和时,如果它不会增加代码的大小,则完成内联。在-O3,只要编译器认为值得做,它就会完成,无论它是否会增加代码的大小。此外,在所有级别的优化(启用优化)中,只调用一次的静态函数。
答案 1 :(得分:7)
是的,特别是如果您启用了高级别的优化。
您可以向编译器提供一个标志来禁用它:-fno-inline-functions。
答案 2 :(得分:3)
如果使用'-finline-functions'或'-O3',它将内联函数。您还可以使用'-finline_limit = N'来调整它的内联量。
答案 3 :(得分:1)
“ - O3 此选项会启用更昂贵的优化,,例如函数内联“
答案 4 :(得分:1)
是的,确实如此,但它也会为非static
非inline
函数生成非内联函数体,因为这是其他翻译单元调用所必需的。
对于inline
函数,如果在任何特定的翻译单元中使用该函数,则无法提供函数体是错误的,因此这不是问题。