函数属性应该放在哪里?
Where should function attributes go?
假设我想用 [[gnu::cold]];
标记一个 non-inline 函数,属性应该放在 header 的声明中,还是应该与源文件中的定义一起使用?假设我不会使用 LTO,只是希望针对二进制大小而不是执行速度优化特定函数。
header 示例:
[[gnu::cold]] void rarely_called_func();
源文件示例:
[[gnu::cold]] void rarely_called_func() { ... }
另外,declaration/definition中的哪个位置应该是:
/* A */ int /* B */ func () /* C */;
除非编译器看到该属性,否则它不能在其优化中使用该属性。如果你不把属性放在声明中,那么编译器就看不到这个属性。结论:为了让编译器使用该属性进行优化,您必须将属性放在函数的声明中(在头文件中)。
假设我想用 [[gnu::cold]];
标记一个 non-inline 函数,属性应该放在 header 的声明中,还是应该与源文件中的定义一起使用?假设我不会使用 LTO,只是希望针对二进制大小而不是执行速度优化特定函数。
header 示例:
[[gnu::cold]] void rarely_called_func();
源文件示例:
[[gnu::cold]] void rarely_called_func() { ... }
另外,declaration/definition中的哪个位置应该是:
/* A */ int /* B */ func () /* C */;
除非编译器看到该属性,否则它不能在其优化中使用该属性。如果你不把属性放在声明中,那么编译器就看不到这个属性。结论:为了让编译器使用该属性进行优化,您必须将属性放在函数的声明中(在头文件中)。