如何告知GCC代码中的热点(高频执行)与冷点(低频执行)?
不同编译器下的函数优化标注方案
你可以通过编译器内置的函数属性/编译指令,单独为两个函数指定不同的优化策略,具体用法不同编译器有差异:
GCC/Clang 环境
用__attribute__修饰函数即可,这是最常用的方案:- 频繁调用的
foo函数可以加hot属性,编译器会自动对其执行速度优先的优化,同时将其放到热点代码段提升缓存命中率;也可以手动指定优化等级为O2/O3 - 调用频率极低的
bar函数可以加cold属性,编译器会自动对其执行体积优先的优化,同时将其放到冷代码段避免占用缓存资源;也可以手动指定优化等级为Os
代码示例:
// 标注为热点函数,速度优先优化 __attribute__((hot)) int foo() { //code } // 标注为冷函数,体积优先优化 __attribute__((cold)) int bar() { //code }如果你想手动指定明确的优化等级,可以改成:
__attribute__((optimize("O3"))) int foo() { //code } __attribute__((optimize("Os"))) int bar() { //code }- 频繁调用的
MSVC 环境
用#pragma optimize指令临时修改单个函数的优化规则,修改完成后要恢复全局优化设置,避免影响后续代码:
代码示例:// 临时设置优化等级为O2,速度优先 #pragma optimize( "O2", on ) int foo() { //code } // 恢复全局优化设置 #pragma optimize( "", on ) // 临时设置优化等级为Os,体积优先 #pragma optimize( "Os", on ) int bar() { //code } // 恢复全局优化设置 #pragma optimize( "", on )
内容的提问来源于stack exchange,提问作者Shambhav
相关产品推荐
相关产品推荐

