在核心**中經常會看到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...