LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 873|回复: 2

内核中的likely和unlikely?

[复制链接]
发表于 2005-6-10 00:27:10 | 显示全部楼层 |阅读模式
不知有人研究过内核中的likely和unlikely没有?

本人最近在读2.6的内核,遇到里面常见的两个宏:
likely 和 unlikely
在include/linux/compiler.h中定义为:

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


也就是说用到了gcc的__builtin系列,在info gcc中可以查到是用于branch prediction,但我分析了汇编输出码没见有何不同啊,不知哪位朋友知此解释?

可能我这里解释得不够清楚,明天先回我的Debian做一个详细分析吧。
发表于 2005-6-10 15:14:26 | 显示全部楼层
应该会加入 instrument prefix “0x2e”“3e”才正常

目前看起来gcc并没有使用intel提供的机制,相似地,gcc通过调整代码块的位置来实现优化,把最可能的路径放在更靠近jxx指令的地方,利用icache和流水线来优化。至于为什么不用2e,3e前缀,确实让人费解。难道写gcc的那些天才测试发现这样反而效率,还是纯粹为了兼容?费解
回复 支持 反对

使用道具 举报

发表于 2005-9-21 14:14:23 | 显示全部楼层
我也发现了这个问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表