1.gcc内建宏 unlikely(x),likely(x)
2.宏原形
#define __builtin_expect(a, b) (a)
#define unlikely(x) __builtin_expect((x), 0)
#define likely(x) __builtin_expect((x), 1)
3.作用
(1) 用于gcc编译优化指令(cpu顺序取指吞吐量大于跳转取指,所以gcc会尽量让指令少发生跳转)
(2) unlikely 告诉gcc结果偏向于x == 0
(3) likely 告诉gcc结果偏向于 x==1
4.用法
int a = 0;
likely(a==0) == unlikely(a==0) //等式左右两边完全一样,对编码来看,加不加likely或者unlikely不影响任何逻辑.如果可以你可以完全忽略掉