在linux中的likely和unlikely
0 推薦
在linux中判斷語句經常會看到likely和unlikely,例如:
if(likely(value)){
else{
簡單從表面上看if(likely(value)) == if(value),if(unlikely(value)) == if(value)。
這兩個巨集對程式執行結果沒有影響,只是用於提高程式效率。其實現和gcc編譯器密切相關。
具體點說,就是如果你覺得程式執行時候一般sndcmd|=0的可能性比較大,那麼就加上likely的macro;反之則加unlikely。
也就是likely和unlikely是一樣的,但是實際上執行是不同的,加likely的意識是value的值為真的可能
性更大一些,那麼執行if的機會大,而unlikely表示value的值為假的可能性大一些,執行else機會大一些。
加上這種修飾,編譯成二進位制**時likely使得if後面的執行語句緊跟著前面的程式,unlikely使得else後
面的語句緊跟著前面的程式,這樣就會被cache預讀取,增加程式的執行速度,likely和unlikely的實現在
include/linux/compiler.h中:
9 #if __gnuc__ == 2 && __gnuc_minor__ < 96
10 #define __builtin_expect(x, expected_value) (x)
11 #endif
12 13 #define likely(x) __builtin_expect((x),1)
14 #define unlikely(x) __builtin_expect((x),0)
__builtin_expect是gcc的乙個預處理命令,其解釋如下:
long __builtin_expect (long exp, long c)
you may use __builtin_expect to provide the compiler with branch prediction
information. in general, you should prefer to use actual profile feedback for this
linux 中likely與unlikely用法
前言核心版本 linux 4.13 在linux核心中,經常可以看見if likely x 或if unlikely x 語句,那麼likely和unlikely是什麼意思呢?本文將對likely和unlikely進行一些討論。likely和unlikely 參考 include linux com...
核心中的likely和unlikely巨集的使用
在核心 中經常會看到unlikely和likely的蹤影。他們實際上是定義在 linux compiler.h 中的兩個巨集。define likely x builtin expect x 1 define unlikely x builtin expect x 0 這裡的 built expec...
mysql在windows和linux中的安裝方式
這裡使用的原始碼包,首先進行編譯,然後才是安裝,過程不是很複雜,只要理解過程,很簡單 解壓檔案到安裝路勁 配置bin目錄到環境變數 把my default.ini複製乙個修改名稱為my.ini 修改裡面的路徑為 basedir c mysql56 datadir c mysql56 data por...