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