GCC提供内建函数之 __builtin_expect
分支预测,目的是将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。
这个指令是gcc引入的,作用是允许程序员将最有可能执行的分支告诉编译器。这个指令的写法为:__builtin_expect(EXP, N)。
意思是:EXP==N 的概率很大。
一般的使用方法是将 __builtin_expect 指令封装为 likely 和 unlikely 宏。这两个宏的写法如下:
#define likely(x) __builtin_expect(!!(x), 1) //x 很可能为真
#define unlikely(x) __builtin_expect(!!(x), 0) //x 很可能为假
内核中的 likely() 与 unlikely()
首先要明确:
if(likely