編寫高效程序需要做到以下幾點:
1.選擇適當(dāng)?shù)乃惴ê蛿?shù)據(jù)結(jié)構(gòu)所意。
2.編寫出能有效優(yōu)化以轉(zhuǎn)化成高效可執(zhí)行代碼的編譯器变汪。
5.1 優(yōu)化編譯器的能力和局限性
優(yōu)化涉及對程序代碼的轉(zhuǎn)換侠坎,而編譯器必須很小心地對程序使用安全的優(yōu)化。GCC有足夠的優(yōu)化能力裙盾,但它并不是“有進(jìn)取心”的編譯器实胸。
5.2 消除循環(huán)的低效率
核心思想是降低代碼復(fù)雜度,線性復(fù)雜度是我們需要的番官。例:課本上提出反復(fù)求長度的vec_length(v)庐完。
5.3 減少過程調(diào)用
使用變量直接訪問而不是過程返回值。
5.4 消除不必要的內(nèi)存引用
對一個內(nèi)存引用(例如指針)進(jìn)行修改至少需要兩次讀和一次寫徘熔,而直接操作一個變量可以減少讀寫次數(shù)门躯。
但這種優(yōu)化只有比較激進(jìn)的優(yōu)化選項才會采用。
5.5 功能單元的性能
延遲:實際執(zhí)行需要的時間
發(fā)射:兩次運算之間需要的最小時間間隔
容量:能同時發(fā)生多少個這種操作
計算吞吐量問題:I為發(fā)射時間酷师,C為容量
單功能單元:
整個CPU:當(dāng)load小于C時讶凉,為()
ya