【C++那些事】if和三母運算?:到底誰快的問題


緣由:

  在追求急速的處理過程中判斷是必不可少的分支條件,那么存在三目運算符 A ?A:0這種取值 和if else 分支取值應該用哪個更好呢,那就取決於到底這兩個語句之間有什么差異

  話不多說先上測試代碼:代碼很簡單

linux:

#include <stdio.h>
#include <sys/time.h>
int main(int argc, char **argv){
    struct timeval start, end;
    int a = 1,b=2,c=0;
    const long long count = 10000000000;
    gettimeofday(&start,NULL);
    for (long long i = 0; i < count; i++)
    {
        if (a>b)
            c=a;
        else
            c=b;
    }
    gettimeofday(&end,NULL);
    long long beginTime = (long long)start.tv_sec * 1000 + (long long)start.tv_usec / 1000;
    long long endTime = (long long)end.tv_sec * 1000 + (long long)end.tv_usec / 1000;

    printf("--if--cost:%d ms.\n",( endTime-beginTime));
    gettimeofday(&start,NULL);
    for (long long i = 0; i < count; i++)
    {
        c=a>b?a:b;
    }
    gettimeofday(&end,NULL);
    beginTime = (long long)start.tv_sec * 1000 + (long long)start.tv_usec / 1000;
    endTime = (long long)end.tv_sec * 1000 + (long long)end.tv_usec / 1000;
    printf("--?:--cost:%d ms.\n",endTime-beginTime);
    return 0;
}

  在使用100億次循環測試結果如下:

  

 

  Centos下測試效率基本相當,前后幾次測試結果,兩者效率近乎等價,畢竟100億次的測試結果已經夠說明問題了

windows:

  win下的同樣執行100億次的循環比較測試,多次測試后,結果如下:

  

   當windows的執行次數下降到1000W次時,結果如下

  

 

   三目運算符還稍微快一點

結論:

  在linux下if else 和三目運算符效率相當,

  在windows下if else的效率在100億次的循環中強於三目運算符,但是在小於1億次以下的循環是三目運算符快一點

底層實現:

  

 

   

 

   三目運算符需要10條匯編指令,if else 需要8條匯編指令,但是對於不同的系統編譯出來的也有差異。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM