<linux/compiler.h> 2.6.36
142 # define likely(x) __builtin_expect(!!(x), 1)
143 # define unlikely(x) __builtin_expect(!!(x), 0)
long __buildin_expect(long EXP, C)是GCC的內(nèi)置函數(shù),用來(lái)給編譯器提供分支預(yù)測(cè)信息:期望EXP==C,返回值是EXP。其中C是編譯時(shí)常量。
eg:
if(__buildin_expect(ptr != NULL, 1)) error(); // 期望ptr!=NULL為1;當(dāng)期望滿足時(shí)(返回的ptr != NULL為1)執(zhí)行error()
if(__buildin_expect(x,0)) foo(); // 期望x==0;當(dāng)期望未滿足(返回的x為真)時(shí)執(zhí)行foo()
總之:
if(likely(x)) foo(); // 期望x為真,且x為真時(shí)執(zhí)行foo()
if(unlikely(x)) foo(); // 期望x為假,且x為真時(shí)執(zhí)行foo()
也就是說(shuō),likely()和unlikely()都是在x為真時(shí)執(zhí)行分支下面的語(yǔ)句;不同的是likely()期望x為真,unlikely期望x為假,
--
ref:
http://blog.richliu.com/2007/02/01/428/