linux-kernel之likely和unlikely

在閱讀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的話,那麼這件事情可能就不會發生,我們就應該把它放在後面,通過這樣的機制,等於是讓上層將意識裏更加容易發生的事情告訴系統從而提高了整體的運行速度,從整個系統來講會有一定的優化


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章