讀《C 效能優化指南》後實用總結

2021-10-21 20:42:34 字數 3017 閱讀 3404

**優化

c++效能優化指南

【權衡利弊】

權衡簡單性、安全性、獲得的效能提公升效果

【過程】

1)觀察了解程式執行結果及**

2)可測試的**優化方案

3)實現優化

4)測試評估

總結:優化是實驗而非直覺

【優化方向】

通過調整達到十幾倍的效率提高是不可能的,通過修改演算法和資料結構是可能。

【優化過程注意項】

1)找出效能問題出在哪,在尋找優化方法進行優化

2)嘗試自己編寫幾次最優查詢和排序,有助於自己編寫**時寫出更優的演算法(因為你離不開查詢排序)

3)常識可能是效能改善的最大敵人,常識的「解毒劑」是實驗形式的科學方法

4)如果執行速度只提高1%是不值得冒險取修改**的,因為修改**可能會會引入bug

【用好的編譯器並用好編譯器】

1)建議使用支援c++11的編譯器,因為c++11實現了右值引用和移動語句

2)正確使用優化選項,可以讓程式的執行速度提高數倍

【使用更好的演算法】

1)選擇乙個最優演算法對效能優化的效果最大

【使用更好的庫】

1)選擇可維護的全面的和非常健壯的庫

2)善用開源庫,它們很容易的整合至現有的工程中,並能夠立即改善程式效能。

eg:boost project(

google code (

【減少記憶體分配和複製】

開發人員只要掌握了這個技巧就可以變成成功的效能優化人員

【提高併發性】

【優化記憶體管理】

【小節】

1.使用更好的編譯器,開啟編譯選項

2.使用最優演算法

3.使用更好的庫並用好庫

4.減少記憶體分配

5.減少複製

6.移除計算

7.使用最優資料結構

8.提高併發

9.優化記憶體管理

【細節優化】

1)特別注意迴圈中不必要的語句刪除

2)選擇好的資料結構

幹著軟體開發,深受硬體裝置痛苦中,在此批評王者榮耀,表揚qq。王者榮耀直接變成雲形式,當把使用者承受的硬體痛苦轉嫁到自己身上,也許才會考慮自身**優化問題。

電腦系統在更新換代,處理器從單核到多核,從4核到8核。記憶體從4g到8g,16g,32g

確實越來越好看,卻沒有越來越順暢。

///【**分析工具】

1)分析器:一般編譯器都會有的分析工具

幫助你分析每行**的訪問量,每個函式的呼叫次數,函式累計執行時間

vs2008以上版本都帶分析器

2)計時器:自己實現程式執行時間統計

【90/10規制】

定義:90%的時間在執行10%的**

找到這個熱點10%,就是效能優化的地方

【實驗過程】

1)必須測量效能

2)做出可測性的**並記錄**

3)記錄**修改

4)如果每次都記錄實驗內容,可快速重複實驗

【string動態處理分配記憶體】【共享記憶體指標】

1)共享記憶體指數的開銷是昂貴的

2)能用std::unique_ptr就不要用std::shared_ptr

3)用std::make_shared替代new

【減少不必要複製】

1)std::vector scalar_product(std::vector const& v, int c)

=》void scalar_product(std::vector const& v, int c, vector& result)

【移除迴圈不變性**】

int c=10,j=10;

set ss;

int sum=0;

for(int i=0; ij;

}=>

int c=10,j=10;

set ss;

int sum=0;

int temp = cj;

int nsize = ss.size();

for(int i=0; i【將常量組合在一起】

支援c++11以上的編譯器,編譯器可以幫們計算常量表示式

eg:seconds = 24 * 60 * 60 * days; 或 seconds = days * (24 * 60 * 60);

編譯器優化後:

seconds = 86400 * days;

如果是:seconds = 24 * days * 60 * 60,編譯器只能在執行時進行乘法計算了。

【使用更高效的運算子】

eg:1)x4 換成 x<<2 (注:x二進位制像左移動兩位)

2)用位移運算和加法運算替代乘法 x9 換成 (x<<3)+x

3)用整數代替浮點數

4)用switch代替if-else if

5) double可能比float快

【多執行緒優化】

1)用std::async替代std::thread

2)減少靜態成員變數,因為程式會先對靜態成員變數初始化

3)限制併發執行緒數量,應當是可執行的執行緒的數量少於或等於處理器核心的數量

4) 多執行緒中減少資源競爭,資源競爭導致無法併發,影響效率

解決方法:複製資源、分隔資源、細粒度鎖(多個互斥量)

5)建議使用併發庫,

eg:boost.thread(

boost.coroutine(

C 效能優化指南

1 用好的編譯器並用好編譯器 支援c 11的編譯器,intelc 速度最快 gnu的c 編譯器gcc g 非常符合標準 visual c 效能折中 clang 最年輕mac os x 2 使用更好的演算法。3 使用更好的資料結構 不同的資料結構在使用記憶體管理器的方式也有所不同 4 使用更好的庫 熟...

C 效能優化指南

優化是一項編碼活動。在傳統的軟體開發過程中,直到編碼完成,專案進入了整合與測試階段,能夠觀察到程式整體的效能時,才會進行優化。而在敏捷開發方式中,當乙個帶有效能指標的特性編碼完成後或是需要實現特定的效能目標時,就會分配乙個或多個衝刺 sprint 進行優化。效能優化的目的是通過改善正確程式的行為使其...

總結c 效能優化策略

1 關於繼承 不可否認良好的抽象設計可以讓程式更清晰,更看起來更好,但是她也是有損失的,在繼承體系中子類的建立會呼叫父類的建構函式,銷毀時會呼叫父類的析構函式,這種消耗會隨著繼承的深度直線上公升,所以不要過度的抽象和繼承。2 物件的復合 物件的復合和繼承很相似,當乙個物件包含其他物件構造時也會引起額...