Chinaunix首页 | 论坛 | 博客
  • 博客访问: 390021
  • 博文数量: 62
  • 博客积分: 388
  • 博客等级: 一等列兵
  • 技术积分: 1032
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-03 20:18
文章分类

全部博文(62)

文章存档

2017年(5)

2016年(3)

2015年(3)

2014年(8)

2013年(15)

2012年(28)

分类: C/C++

2012-12-03 11:21:25

在看程序的时候会见到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
{
.......
}
通过这种方式,编译器在编译过程中,会将可能性更大的代码紧跟着前面的代码,从而减少指令跳转带来的性能上的下降。
阅读(926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~