ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

__builtin_expect

2020-07-30 20:33:08  阅读:37  来源: 互联网

标签:__ buildin 编译器 value builtin 指令 expect


__buildin_expect

功能是将分支转移信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。

__buildin_expect 是 gcc 引入的指令,它允许编码人员将最有可能 的分支告诉编译器。写法为:

__buildin_expect(exp, n)

意为 exp == n 的概率很大。

一般的使用方法是将 __buildin_expect 指令封装为 likely 和 unlikely 宏,两个宏的写法如下:

  #define likely(x) __builtin_expect(!!(x), 1) // x为真的可能性很大
  #define unlike(x) __builtin_expect(!!(x), 0) // x为假的可能性很大

需要明确的是:



  if (likely(value)) // 等价于 if (value)
  if (unlike(value)) // 也等价于 if (value)

示例:

  if (unlikely(x > 0)) {
      y = 1;
  } else {
      y = -1;
  }

在上面的代码中 gcc 编译的指令会预先读取 y = -1 这条指令,这适合 x 的值大于 0 的概率比较小的情况,这样系统在运行时就会减少重新取指的动作。

标签:__,buildin,编译器,value,builtin,指令,expect
来源: https://www.cnblogs.com/tongyishu/p/13406141.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有