在核心**中經常會看到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...
Java核心中的核心 多型
一句話概括多型 也叫動態繫結 在執行期間,判斷其引用的實際型別,根據其實際的型別,呼叫對應的方法。多型可以幫助我們的程式的顆擴充套件性達到極致。多型的三個必要條件 1 要有繼承。2 子類要重寫父類的方法。3 父類的引用指向子類的物件。根據以下的 來理解 class animal 在animal類裡面...
linux核心中的BUG 和 BUG ON
文章出處 在核心 中,經常會看到一些除錯函式,如bug,bug on等。使用前,先在核心配置中把kernel debug選上 make menuconfig kernel hacking kernel debug 作用 一些核心呼叫可以用來方便標記bug,提供斷言並輸出資訊。最常用的兩個是bug 和...