nn_slow和nn_fast

#define nn_fast(x) __builtin_expect ((x), 1)
#define nn_slow(x) __builtin_expect ((x), 0)

__builtin_expect目的是提供分支信息給編譯器,讓編譯器優化代碼,減小指令的跳轉帶了的性能降低。
處理器裏有不少處理單元,能夠預加載不少指令進行並行運算,可是若是遇到跳轉的指令沒有加載處處理
單元中,全部的預加載指令都必須從新加載。

__builtin_expect ((x), 1) 這個能夠告訴編譯器,x爲真的狀況比較多
__builtin_expect ((x), 0) 這個能夠告訴編譯器,x爲假的狀況比較多

if (__builtin_expect ((x), 1)) {
   code1...
}
else {
   code2....
}
x爲真的狀況多,編譯器編譯的時候優化代碼,使得執行時,預先加載code1的代碼的指令

__builtin_expect ((x), 0)同理,預先加載code2的代碼指令。

__builtin_expect不影響到x的值,x爲真,__builtin_expect返回的值也爲真
if(nn_fast(x)) == if (x)
if(nn_slow(x)) == if (x)
相關文章
相關標籤/搜索