Kev*_*inZ 5 c c++ optimization attributes gcc
假设我想标记一个非内联函数,[[gnu::cold]];该属性应该放在标题的声明中,还是应该与源文件中的定义一起使用?假设我不会使用 LTO,只是希望针对二进制大小而不是执行速度优化该特定函数。
标题示例:
[[gnu::cold]] void rarely_called_func();
Run Code Online (Sandbox Code Playgroud)
源文件示例:
[[gnu::cold]] void rarely_called_func() { ... }
Run Code Online (Sandbox Code Playgroud)
此外,声明/定义中的哪个位置应该是:
/* A */ int /* B */ func () /* C */;
Run Code Online (Sandbox Code Playgroud)
除非编译器可以看到该属性,否则它无法在优化中使用该属性。如果不将属性放在声明中,则编译器将看不到该属性。结论:为了让编译器使用该属性进行优化,必须将该属性放在函数的声明中(在头文件中)。