程式優化的內容和原則
對程式的優化,通常是指優化程式**或程式執行速度。優化**和優化速度實際上是乙個矛盾的統一,一般是優化了**的尺寸,就會帶來執行時間的增加,如果優化程式的執行速度,通常會帶來增加**的***,很難魚與熊掌兼得,只能在設計時掌握乙個平衡點。
如果我們確實需要對某些**進行實質性的優化,那麼首先要清楚哪一部分**的執行最浪費時間。往往最浪費時間的**很少,大部分是大量的迴圈最占用時間。
優化的級別常分為三類:演算法級優化;語言級優化;指令級優化。
體現乙個程式設計師水平最重要的地方就是演算法。乙個好的演算法使用非常少的**就能實現原來很複雜的操作,但這是很難做到的。尤其是這些演算法經常與負載的善有關,所以需要比較和測試才能有好的效果。
語言級優化就是採用較少的程式語言**來代替冗長的**塊,例如,把某些賦值語句放到多迴圈的外面、使用
inline
函式、使用指標、用引用代替結構賦值、使用指標的移動代替記憶體拷貝、把初始化操作放在一開始而不是迴圈中間,等等。它所遵循的原則是「無**」原則,減少需要執行的語句是提高速度的最直接的做法。這樣的程式比較簡捷,執行效果也比較穩定。
指令級優化則要深入得多,這裡所用的語言一般是組合語言。這種方法的除錯和測試比較複雜,程式不太容易懂,也更容易出錯,結果有時與硬體有關。這種方法所針對的**數量應該比較少,僅是關鍵的部分。這樣的優化是以指令週期作為單位的。
優化的內容一般有:
**替換
使用周期短的指令代替周期長的指令。如,使用左移指令代替乘數是
2的倍數的乘法;使用倒數指令代替除法指令。
減少分支**
這是pentium
以上cpu
特有的功能,它會執行該指令前預讀一些指令,但是如果有分支就會造成預讀的失效。
並行指令
這是pentium
以上cpu
特有的多流水線的優勢,兩條(或多條,在
pentiumpro
以上)引數無關的指令可以被並行執行。
mmx指令
在處理大量位元組型資料時可以用到它,一次可以處理
8個位元組的資料。
指令的預讀
在讀取大量資料時,如果該資料不在快取裡,將會浪費很多時間,因此需要提前把資料放在快取中。這個功能在
pentium ii
的下一代
cpu中出現。
優化原則有以下3條:
等價原則:經過優化後不應改變程式執行的功能。
有效原則:使優化後所產生的目標**執行時間確實較短,占用的空間確實較小。
合算原則:應盡可能以較低的代價取得較好的優化效果,應當為值得優化的程式進行優化。
流程設計和優化原則
該文根據安達信流程設計培訓資料整理。流程的定義 流程是一系列活動的組合,這一組合接受各種投入要素,包括 資訊 資金 人員 技術 文件等。最後通過流程產生所期望的結果,包括產品 服務或某種決策結果。流程四大構成要素 組織架構,客戶滿意度,轉變促成,績效管理和標竿 現有流程評價和未來流程設計 流程設計應...
LTE優化原則和思路
lte網路優化的基本原則是在一定的成本和質量的前提下,建立乙個容量和覆蓋範圍都盡可能大的網路,並能夠適應未來一段時間的網路發展要求。網路優化的基礎是覆蓋優化,在覆蓋能夠保證的基礎上進行業務效能優化,最後進行整體優化。整體優化主要包括覆蓋優化,pci優化,干擾排除,鄰區優化和系統引數優化等等。覆蓋問題...
MySQL語句優化的原則
mysql語句優化的原則 1 使用索引來更快地遍歷表。預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,資料在物理上隨機存放在資料頁上。合理的索引設計要建立在對各種查詢的分析和 上。一般來說 a.有大量重複值 且經常有範圍查詢 和order by group by發生的列,可考...