Chinaunix首页 | 论坛 | 博客
  • 博客访问: 409186
  • 博文数量: 35
  • 博客积分: 943
  • 博客等级: 准尉
  • 技术积分: 742
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-15 13:17
个人简介

积累知识,方便自己

文章分类

全部博文(35)

文章存档

2014年(2)

2013年(5)

2012年(13)

2011年(15)

分类: LINUX

2012-08-14 17:16:03

在看程序的时候会见到likely()和unlikely(),那么他们之间有什么区别呢;
 
首先:if(likely(value)) <=> if(value)
            if(unlikely(value))<=>if(value)
 
那么这样看来这两个函数时一样的,那么为什么要用他们呢,先看下他们的定义:
 
#define likely(x)    __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
 
__builtin_expect()是gcc提供给程序员使用的,目的是将"分支转移"的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。
 
__builtin_expect((x),1) 表示x的值为真的可能性更大
__builtin_expect((x),0) 表示x的值为假的可能性更大
 
也就是使用likely(),执行if后面的语句的机会更大,使用unlikely(),执行else后面的语句的机会更大。
 
比如:
if(likely(x==1)    //x等于1的可能性更大
{
    .......
}
else
{
    .......
}
通过这种方式,编译器在编译过程中,会将可能性更大的代码紧跟着前面的代码,从而减少指令跳转带来的性能上的下降。
阅读(2432) | 评论(0) | 转发(0) |
0

上一篇:diff与patch命令

下一篇:BM算法

给主人留下些什么吧!~~