最近在拜读一个项目源代码的过程中,发现了一个有意思的GCC特性,现将这个特性总结如下:
开发人员在开发服务的过程中,可以根据业务逻辑的特性来判断当前的条件语句被执行的概率情况,经常被执行到的代码片段可以紧邻顺序执行的代码片段后边,偶尔被执行到的条件代码片段被放到其他代码片段,从而减少代码在顺序执行过程中的代码上下文的跳转次数,达到提高程序执行效率的目的。这种方式的优化,需要严重的依赖于业务逻辑所处的环境,对于GCC等编译器来将,显然是无法根据业务逻辑自动做出性能优化的,最直接的一种方法就是:由开发人员告诉编译器,这部分代码片段被执行的概率比较高,可以进行优化。为此,诞生了两个针对进行这种优化的宏定义,分别是:likely和unlikeyly,经常被用于的使用场景为:
if (likely(value)){
//do thing1
}else{
//do thing2
}
if (unlikely(value)){
//do thing1
}else{
// do thing2
}