macro : likely and unlikely

從codebase中節錄出來已下的marco

# define likely(x) __builtin_expect(!!(x), 1)
# define unlikely(x) __builtin_expect(!!(x), 0)

很妙的用了兩個not,有點不懂為什麼,很多此一舉。

這兩個macro是用來讓編譯器能夠complie出更有效能的code

if (likely(x > 0)) 以及if (unlikey(x > 0))的意思都等於if (x > 0)

差別就在於設計者若能預先知道if的情況較容易發生還是else的情況較容易發生

也就是說TRUE的機率高還是FALSE的機率高,likely表示TRUE的機率高於FALSE,unlikely則相反。

以上面的範例 if (likely(x > 0)) ,則表示 x > 0的機會較大,此時complier會將 if 的內容編譯在 if 的判斷式之後以減少跳轉的指令,而達到效能的提升。

反之,if (unlikey(x > 0)),則表示 x < 0的機會較大,此時complier會將 else 的內容編譯在 if 的判斷式之後以減少跳轉指令造成校能的下降。

留言

熱門文章