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