小默

linux kernel macro likely() unlikely()

<linux/compiler.h> 2.6.36
142 # define likely(x)  __builtin_expect(!!(x), 1)
143 # define unlikely(x)    __builtin_expect(!!(x), 0)

long __buildin_expect(long EXP, C)是GCC的内置函数,用来给编译器提供分支预测信息:期望EXP==C,返回值是EXP。其中C是编译时常量。
eg:
if(__buildin_expect(ptr != NULL, 1)) error(); // 期望ptr!=NULL为1;当期望满足时(返回的ptr != NULL为1)执行error()
if(__buildin_expect(x,0)) foo(); // 期望x==0;当期望未满足(返回的x为真)时执行foo()

总之:
if(likely(x)) foo();     // 期望x为真,且x为真时执行foo()
if(unlikely(x)) foo(); // 期望x为假,且x为真时执行foo()
也就是说,likely()和unlikely()都是在x为真时执行分支下面的语句;不同的是likely()期望x为真,unlikely期望x为假,

--
ref:
http://blog.richliu.com/2007/02/01/428/

posted on 2011-02-03 16:23 小默 阅读(785) 评论(1)  编辑 收藏 引用 所属分类: Linux


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

留言簿(13)

随笔分类(287)

随笔档案(289)

漏洞

搜索

积分与排名

最新评论

阅读排行榜