1. 程式人生 > >gcc 分支預測

gcc 分支預測

> #if defined __GNUC__
> #define likely(x) __builtin_expect (!!(x), 1)
> #define unlikely(x) __builtin_expect (!!(x), 0)
> #else
> #define likely(x) (x)
> #define unlikely(x) (x)

unlikely表示不期望發生,likely表示期望發生,__builtin_expect(x,y) 會告訴編譯器大多數情況下x==y相等,你也許會更喜歡使用 gcc 的一個引數 ‘-fprofile-arcs’ 來收集程式執行的關於執行流程和分支走向的實際反饋資訊,如果這樣寫

int function(int x)
{
    int m=0;
    if(unlikely(x)){
        m = 10; //1
    }else{
    m=200;      //2
    }

}

cpu會優先載入else(2)的部分,來提高cpu分支預測的準確性