核心中likely和unlikely巨集定義

2022-09-06 20:39:15 字數 602 閱讀 1667

在核心**中經常會看到unlikely和likely的蹤影。他們實際上是定義在 linux/compiler.h 中的兩個巨集。

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

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

這裡的__built_expect()函式是gcc的內建函式。

至於為什麼要在核心**中使用這兩個巨集,主要的目的是為了進行**的優化,提高系統執行速度。

比如 :

if (likely(a>b)) else {

printf("in the unlikely, is your expecting\n");

if(likely(aprintf("in the likely, is your expecting\n");

return 0;

執行結果:

in the unlikely,is not your expecting!

in the likely, is your expecting

總之,likely和unlikely的功能就是增加cache的命中率,提高系統執行速度。

核心中的likely和unlikely巨集的使用

在核心 中經常會看到unlikely和likely的蹤影。他們實際上是定義在 linux compiler.h 中的兩個巨集。define likely x builtin expect x 1 define unlikely x builtin expect x 0 這裡的 built expec...

在linux中的likely和unlikely

在linux中的likely和unlikely 0 推薦 在linux中判斷語句經常會看到likely和unlikely,例如 if likely value else 簡單從表面上看if likely value if value if unlikely value if value 這兩個巨集對...

詳解likely和unlikely函式

在linux核心中likely和unlikely函式有兩種 只能兩者選一 實現方式,它們的實現原理稍有不同,但作用是相同的,下面將結合linux 2.6.38.8版本的核心 來進行講解。1 對 builtin expect的封裝 它們的源 如下 cpp view plain copy linux 2...