在閱讀linux源代碼的時候,我們經常會發現likely和unlikely,這兩個宏語句定義在compiler.h下,
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
這裡我們需要先了解__builtin_expect:# define __builtin_expect(x, expected_value) (x)
是以可以發現其實likely(x)和x是一個意思,那麼為什麼還要費這麼一個力氣去做複雜化呢?
這都是為了提高系統的速度,當likely取代直接判斷的時候,gcc編譯器會知道likely的分支更加可能發生,那麼我們把它放在前面,這樣cache命中的機率也會增高,而如果是unlikely的話,那麼這件事情可能就不會發生,我們就應該把它放在後面,通過這樣的機制,等于是讓上層将意識裡更加容易發生的事情告訴系統進而提高了整體的運作速度,從整個系統來講會有一定的優化
轉載于:https://blog.51cto.com/hereandthere/1559322