ICode9

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

__builtin_expect

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

标签:__ 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

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

ICode9版权所有