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

2021-05-23 05:52:51 字數 674 閱讀 8765

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