likely unlikely

  • 1. 代码:
  • 2. 解释:
  • 3. 原因:
  • 参考:

1. 代码:

在很多源码如Linux内核,我们都能看到likely()和unlikely()这两个宏。

通常这两个宏定义是下面这样的形式。

 #define LIKELY(x) __builtin_expect(!!(x),1) //表示 x 的值为真的可能性更大//如: if(likely(1))#define UNLIKELY(x) __builtin_expect(!!(x),0) //表示 x 的值为假的可能性更大。//如: if(unlikely(!0))

可以看出这2个宏都是使用函数 __builtin_expect()实现的, __builtin_expect()函数是GCC的一个内建函数(build-in function).

2. 解释:

如果能事先判断一个if语句时经常为真还是经常为假,那么可以用unlikely和likely来优化这段判断的代码。
如:
if(1){……} 这样这里就可以使用 if(likely(1))
if(0){……} 这样这里就可以使用 if(unlikely(!0))

if(likely(something))    //等价于 if(something) 等于 if(1)//表示 something 为真  情况经常发生likelyif(unlikely(!something))   //等价于 if(!something) 等于 if(!0)//表示 !something 为真 情况很少发生 可以忽略掉 unlikely

3. 原因:

由于大部分程序员在分支预测方面做得很糟糕,
所以GCC 提供了这个内建函数来帮助程序员处理分支预测.

参考:

https://www.cnblogs.com/LubinLew/p/GCC-__builtin_expect.html

最新文章

  1. 分析隐藏在比特币区块链中的Pony CC服务器
  2. 我的世界java手机版下载1.15_我的世界java版20w16a
  3. php -- 取整数
  4. Go http client 连接池不复用的问题
  5. android studio文件读写,Android 中的文件读写操作
  6. 处理 TXT 文本技巧
  7. RFC 2544 性能测试
  8. ARM开发经典学习网站推荐【转】
  9. php如何检测usbkey,检测USBkey未插入如何处理
  10. 计算机专业人才选拔专业要求,计算机专业创新人才培养模式研究
  11. [附源码]计算机毕业设计JAVA景区门票系统
  12. c++面试常见问题总结
  13. php strtotime技巧,获取前几天、前几周、后几天、后几周,本月开始和本月结束时间
  14. docker单主机网络类型
  15. Linux项目--多人在线聊天系统的开发
  16. Executors.newFixedThreadPool(int threads)和Executors.newCachedThreadPool()
  17. 小米笔记本12.5英寸装ubuntu后设置快捷键开启和关闭触摸板
  18. CSS 中 a 标签为什么不能继承父类的颜色?
  19. 解读华为云应用平台ROMA,黑科技实现一站式政企上云
  20. 软件工程:7.生存周期过程和软件生存周期模型

热门文章

  1. 记一次inline使用不当导致编译期Null指针的排查过程
  2. 设计分享|单片机抢答器(汇编)
  3. 程序员的数学(四)—— 数学归纳法,如何征服无穷数列
  4. jsp图片因为路径导致加载不出的问题
  5. TokenInsight 对话首席——交易制胜,二级市场数据与趋势
  6. c语言负数显表,C语言编程问题请教高手-专业自动化论坛-中国工控网论坛
  7. 花花与三猫Catlive(hpu)
  8. 这个岗位国内人才缺口超30万?突破职场瓶颈,薪资飙升?
  9. 启用Docker对ipv6的支持
  10. HTTP客户端错误状态码--4XX