C语言 宏__builtin_expect的使用

编译器优化 cpu 执行效率

一、计算机特点:

1、cpu流水线,以提前取多条指令进行并行处理
2、到跳转时,则需要重新取指令,打乱了CPU流水线,
3、跳转次数少的程序拥有更高的执行效率

二、__builtin_expect特点:

优点
1、提供分支预测信息,把“很有可能发生”的条件分支放在顺序执行指令段,编译器进行汇编代码代码优化
缺点:
1、造成了代码冗余

三、示例解析

#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)

int main(char *argv[], int argc)
{
   int a = atoi (argv[1]);
   if (unlikely (a == 2))
      a++;
   else
      a--;
   printf ("%d\n", a);
   return 0;
}

1、这里if中判断的条件是a == 2,但是用unlikely括号起来,表示a!=2的情况更可能发生,即a++不太可能被执行,则编译时会把a++的汇编代码放到return 0后面,而a–就放在汇编指令cmp之后,以确保其顺序执行,节省了跳转指令的时间
2、引入__builtin_expect函数来增加条件分支预测的准确性,cpu 会提前装载后面的指令,遇到条件转移指令时会提前预测并装载某个分支的指令。编译器会产生相应的代码来优化 cpu 执行效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值