Chinaunix首页 | 论坛 | 博客
  • 博客访问: 248605
  • 博文数量: 70
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 173
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-09 13:47
文章存档

2023年(1)

2018年(7)

2017年(4)

2016年(1)

2015年(25)

2014年(32)

我的朋友

分类: LINUX

2018-02-07 14:30:24

在2.6内核中,随处可以见到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(version>=2.96)提供给程序员使用的,目的是将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。
 
__builtin_expect((x),1) 表示x的值为真的可能性更大;
__builtin_expect((x),0) 表示x的值为假的可能性更大。
 
也就是说,使用likely(),执行if后面的语句的机会更大,使用unlikely(),执行else后面的语句的可能性更大。
阅读(848) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~