Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291212
  • 博文数量: 49
  • 博客积分: 3083
  • 博客等级: 中校
  • 技术积分: 710
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 08:22
文章分类

全部博文(49)

文章存档

2009年(8)

2008年(41)

分类: LINUX

2008-08-19 12:19:50

    前段时间在阅读kernel的时候搞不懂为什么要用likely和unlikely,直接一个比较就搞定了。今天查到了likely和unlikely的宏定义

//位置为:include/linux/compile.h

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

在定义中需要用到两个!!的原因,应该是为了保证比较的是bool值0或者1
当x! = 0时,(x) == 1不能恒成立
当x! = 0时,!!(x) == 1恒成立
找了一圈,也没找到__builtin_expect()的定义,倒是在gcc的网站上找到这样的一段描述
You may use __builtin_expect to provide the compiler with branch prediction information. In general, you should prefer to use actual profile feedback for this (-fprofile-arcs), as programmers are notoriously bad at predicting how their programs actually perform. However, there are applications in which this data is hard to collect.
大概意思就是说你可以使用__builtin_expect提供编译器与分支预测信息。在通常情况下,您应该更喜欢使用实际的形式反应这个(-fprofile-arcs) ,作为程序员是众所周知难以预测他们的如何程序执行。但是,也有应用在这数据是很难收集。


所以也只能大概的分析下,接下来或许会去看看__builtin_expect的详细代码


阅读(1766) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~