现在的位置: 首页 > 综合 > 正文

有关likely和unlikely

2013年10月01日 ⁄ 综合 ⁄ 共 651字 ⁄ 字号 评论关闭

      在linux中判断语句经常会看到likely和unlikely,例如:

if(likely(value)){

}

else{

}

简单从表面上看if(likely(value)) == if(value),或者if(unlikely(value)) == if(value)。也就是likely和unlikely的用法是一样的,但是实际上执行是不同的,加likely的意识是value的值为真的可能性更大一些,那么执行if的机会大,而unlikely表示value的值为假的可能性大一些,执行else机会大一些。加上这种修饰,编译成二进制代码时likely使得if后面的执行语句紧跟着前面的程序,unlikely使得else后面的语句紧跟着前面的程序,这样就会被cache预读取,增加程序的执行速度,likely和unlikely的实现在include/linux/compiler.h中:

      9 #if __GNUC__ == 2 && __GNUC_MINOR__ < 96
     10 #define __builtin_expect(x, expected_value) (x)
     11 #endif
     12
     13 #define likely(x)   __builtin_expect((x),1)
     14 #define unlikely(x) __builtin_expect((x),0)

 

原文地址:http://blog.chinaunix.net/u/31100/showart_240658.html

抱歉!评论已关闭.