GCC内联C ++是否在没有'inline'关键字的情况下运行?

时间:2009-10-26 17:49:07

标签: c++ optimization gcc inline optimizer-hints

GCC在编译C ++代码时是否尝试通过选择未标记inline关键字的内联函数来优化速度?

5 个答案:

答案 0 :(得分:35)

是。任何编译器都可以随意内联任何函数,只要它认为这是一个好主意。海湾合作委员会也这样做。

在-O2优化级别,当编译器认为值得做(使用启发式)时,如果它不会增加代码的大小,则完成内联。在-O3,只要编译器认为值得做,它就会完成,无论它是否会增加代码的大小。此外,在所有级别的优化(启用优化)中,只调用一次的静态函数。

答案 1 :(得分:7)

是的,特别是如果您启用了高级别的优化。

您可以向编译器提供一个标志来禁用它:-fno-inline-functions。

答案 2 :(得分:3)

如果使用'-finline-functions'或'-O3',它将内联函数。您还可以使用'-finline_limit = N'来调整它的内联量。

答案 3 :(得分:1)

“ - O3 此选项会启用更昂贵的优化,,例如函数内联

答案 4 :(得分:1)

是的,确实如此,但它也会为非staticinline函数生成非内联函数体,因为这是其他翻译单元调用所必需的。

对于inline函数,如果在任何特定的翻译单元中使用该函数,则无法提供函数体是错误的,因此这不是问题。