#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)