likely 與unlikely 函式的意義

2021-09-13 03:44:01 字數 567 閱讀 2168

總之,likely與unlikely互換或不用都不會影響程式的正確性。但可能會影響程式的效率。

if(likely(foo))  //認為foo通常為1

if(unlikely(foo)) //認為foo通常為0

感謝各位光顧!

不知道有沒有寫清楚,望指正!

疑惑:為什麼likely或是unlikely要定義成__builtin_expect(!!(x), 1),而不直接用__builtin_expect(x, 1)?" !!(x) "與" x "有什麼不同?

另外核心2.6.31.5中likely和unlikely還有一種定義:

# ifndef likely

# define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1))

# endif

# ifndef unlikely

# define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 0))

# endif

詳解likely和unlikely函式

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

使用likely和unlikely 優化程式效能

作用 likely unlikely是為編譯器提供對分支優化的提示,基本用於if else的分支優化場景。if else在彙編時會將else分支的命令生成跳轉語句 jmp 而跳轉會影響程式效能,所以如果大部分情況下都是else分支成立的話,程式每次都會執行跳轉,從而影響效率,使用likely和unl...

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

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