关于__builtin_expect
先上代码
#include <stdio.h>
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
int main(int argc, const char* argv[]) {
int count = 10;
if (likely(count > 1))
printf("It is ok\n");
else
printf("It isn't ok\n");
int tmp = !!5;
printf("tmp = %d\n", tmp);
tmp = !!0;
printf("tmp = %d\n", tmp);
return 0;
}
再上输出结果
It is ok
tmp = 1
tmp = 0
结论
- __builtin_expect是gcc提供的,目的是为了优化代码
- __builtin_expect(Exp, N),意思是Exp == N的概率很大
- !!的写法,是为了确保最后表达式的值 = 0 or 1