<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的內置函數,用來給編譯器提供分支預測信息:期望EXP==C,返回值是EXP。其中C是編譯時常量。
eg:
if(__buildin_expect(ptr != NULL, 1)) error(); // 期望ptr!=NULL為1;當期望滿足時(返回的ptr != NULL為1)執行error()
if(__buildin_expect(x,0)) foo(); // 期望x==0;當期望未滿足(返回的x為真)時執行foo()
總之:
if(likely(x)) foo(); // 期望x為真,且x為真時執行foo()
if(unlikely(x)) foo(); // 期望x為假,且x為真時執行foo()
也就是說,likely()和unlikely()都是在x為真時執行分支下面的語句;不同的是likely()期望x為真,unlikely期望x為假,
--
ref:
http://blog.richliu.com/2007/02/01/428/