【发布时间】:2021-05-06 08:51:43
【问题描述】:
来自 gcc 函数属性:https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html 冷属性可以提示gcc分区调用者的冷到2部分:正常部分(保持部分)和冷部分进入分离功能
冷
函数的冷属性用于通知编译器该函数不太可能被执行。该函数针对大小而不是速度进行了优化,并且在许多目标上,它被放置在文本部分的特殊子部分中,因此所有冷函数看起来很接近,从而提高了程序非冷部分的代码局部性。分支预测机制将导致代码中冷函数调用的路径标记为不太可能。因此,将用于处理不太可能的情况(例如 perror)的函数标记为冷函数很有用,以改进在极少数情况下调用标记函数的热函数的优化。
当配置文件反馈可用时,通过 -fprofile-use 自动检测冷功能并忽略此属性。
这是一个例子https://godbolt.org/z/j7sK4hd48
但是,像 __builtin_expect(int , int) 这样的其他提示无法提示编译器进行此类优化,而是编译器仅将 unexpected 放在函数的底部。但不要将它们分开并拆分为另一个函数,就像函数属性 cold 一样。
GCC 是否计划支持 __builtin_expect 的这种优化? 如果没有,我们可以做其他努力来实现这种效果吗?
另一方面,Clang 似乎不支持这种拆分热/冷鳕鱼来分离功能,或者我错过了?
【问题讨论】:
-
is GCC planing to这是一些 gcc 邮件列表或一些 gcc 开发人员的问题,而不是 stackoverflow 上的问题。
标签: c++ c gcc clang compiler-optimization