程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ 代碼性能優化,代碼性能優化

C++ 代碼性能優化,代碼性能優化

編輯:C++入門知識

C++ 代碼性能優化,代碼性能優化


對於一個可結合和可交換的合並操作來說,比如整數的加法或乘法,

我們可以通過將一組合並操作分割成 2 個或更多的部分,並在最後合並結果來提高性能。

 

原理:

普通代碼只能利用 CPU 的一個寄存器,分割後可以利用多個寄存器。

當分割達到一個數量時,寄存器用完,性能不再提升,甚至會開始下降。

 

用代碼來描述,如下:

// 一般情況下的代碼    
for (i = 1; i < n+1; i++)
{
    res = res OPER i;
}

// 循環分割後代碼
for (i = 1; i < n; i+=2)
{
    res1 = res1 OPER i;
    res2 = res2 OPER (i+1);
}

int 整數加法,性能測試結果對比如下:

整數的加法,普通代碼運行 26s,循環分割後,18s。

浮點數計算的性能提升,明顯大於整數,乘法的性能提升,略大於加法。

 

完整測試代碼:

#include <time.h>
#include <iostream>
#define OPER +
#define INIT 0

using namespace std;

int calc1(int n)
{
    int i;
    int res = INIT;

    for (i = 1; i < n+1; i++)
    {
        res = res OPER i;
    }

    return res;
}


int calc2(int n)
{
    int i;
    int res1 = INIT;
    int res2 = INIT;

    for (i = 1; i < n; i+=2)
    {
        res1 = res1 OPER i;
        res2 = res2 OPER (i+1);
    }
    for (; i < n+1; i++)
    {
        res1 = res1 OPER i;
    }

    return res1 OPER res2;
}

typedef int (*FUNC)(int n);

int time_test(FUNC calc, int param)
{
    cout << " Result: " << calc(param) << "\t";
    time_t t_begin;
    time(&t_begin);

    for (int i = 0; i < 10000; i++)
        for (int j = 0; j < 10000; j++)
            calc(param);

    time_t t_end;
    time(&t_end);
    cout << "Time Cost: " << difftime(t_end, t_begin) << endl;
}

int main()
{
    cout << "calc1 ";
    time_test(calc1, 100);

    cout << "calc2 ";
    time_test(calc2, 100);
    return 0;
}

 


C程序性可以優化:20個實驗與達人技巧

作者將C高效編程的心得濃縮於20個技巧,並將這些技巧通過實驗的方式進行講解,簡明易懂,使人印象深刻。《》書中帶有大量的代碼實例,使讀者不僅能夠從理論上得以提高,而且還能夠輕松地在實踐中應用。·算法導論(超過50萬人閱讀的算法聖經!) ·謝謝你離開我(張小娴最新散文)內容簡介  《》從CPU與編譯器的運行機制講起,帶領讀者一步步了解程序的執行成本、編譯器的優化選項等,總結出許多C程序性能優化的技巧,並以實驗的方式進行了講解,簡明易懂,使人印象深刻。書中帶有大量的代碼實例,使讀者不僅能夠了解代碼優化的原理,還能夠輕松地在實踐中應用。  《》適合有一定基礎的C語言編程人員閱讀。作者精通高效編程,其開發的C編譯器,不僅適用於16位及32位系統,還能在GPU中對視頻數據進行實時編譯。作者將C高效編程的心得濃縮於20個技巧,並將這些技巧通過實驗的方式進行講解,簡明易懂,使人印象深刻。《》書中帶有大量的代碼實例,使讀者不僅能夠從理論上得以提高,而且還能夠輕松地在實踐中應用。·算法導論(超過50萬人閱讀的算法聖經!) ·謝謝你離開我(張小娴最新散文)內容簡介  《》從CPU與編譯器的運行機制講起,帶領讀者一步步了解程序的執行成本、編譯器的優化選項等,總結出許多C程序性能優化的技巧,並以實驗的方式進行了講解,簡明易懂,使人印象深刻。書中帶有大量的代碼實例,使讀者不僅能夠了解代碼優化的原理,還能夠輕松地在實踐中應用。  《》適合有一定基礎的C語言編程人員閱讀。作者精通高效編程,其開發的C編譯器,不僅適用於16位及32位系統,還能在GPU中對視頻數據進行實時編譯。作者將C高效編程的心得濃縮於20個技巧,並將這些技巧通過實驗的方式進行講解,簡明易懂,使人印象深刻。《》書中帶有大量的代碼實例,使讀者不僅能夠從理論上得以提高,而且還能夠輕松地在實踐中應用。·算法導論(超過50萬人閱讀的算法聖經!) ·謝謝你離開我(張小娴最新散文)內容簡介  《》從CPU與編譯器的運行機制講起,帶領讀者一步步了解程序的執行成本、編譯器的優化選項等,總結出許多C程序性能優化的技巧,並以實驗的方式進行了講解,簡明易懂,使人印象深刻。書中帶有大量的代碼實例,使讀者不僅能夠了解代碼優化的原理,還能夠輕松地在實踐中應用。  《》適合有一定基礎的C語言編程人員閱讀。
 

推薦幾本對於C語言性可以優化(速度、內存優化) 與 C語言程序設計模式的經典書籍?

上網查吧,能到了這個級別估計足夠自己動手的了,:-)
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved