Delphi語言最佳化
1)記錄或數組類型的回傳值
C++程式設計師不會這樣做,因為傳回值會被壓入堆疊,導致時間效率和空間效率都降低。 Delphi無此問題,回傳值相當於Out參數,由呼叫者傳遞記憶體單元指標。所以可以使用記錄或陣列傳回值,以增將可讀性和書寫表達式的方便性。
2)公共表達式
Delphi只在一個語句行內提取公共表達式。如果公共表達式包含函數呼叫或屬性訪問,則不被提取,即要重複計算,因為提取可能導致改變語義。
3)const參數
當函數參量不被改變時,如果參量長度超過4位元組或是介面、字串、動態陣列類型,使用const參數,可以使編譯器以位址方式傳遞,且不對引用技術進行修改。
4)緊縮
Delphi分配儲存單元時會指派盡量小的空間。如果夠小且可放入暫存器內,則一般會使用暫存器直接操作。例如長度為4位元組的記錄或數祖賦值時,編譯器會自動按DWord用32位元暫存器處理。
5)算符
整除2或4會優化成右移位,乘2或4會優化成左移位,所以不需要用移位運算,可以寫出更可讀的程式碼。但乘除8和其他2的倍數不會有此優化。
i := i + 1; 和Inc(i); 一般產生的程式碼相同。
6)浮點
Delphi不會對浮點計算做優化,即使加零運算也不會被優化掉,而且會增加很多FWAIT指令。所以寫關鍵的浮點運算時要自己優化好表達式,自己提取公共表達式。盡量少用中間變量,因為浮點變數不會被優化掉,即使後面沒有使用也會寫回記憶體。必要時用彙編,或考慮用C。雖然如此,一般情況下,等價的Delphi和C的浮點程式效能差異不大。
7)with語句
with可以產生隱式中間變量,避免重複計算
8)集合
i in [0..31] 比(i >= 0) 及 (i <= 31) 快
9)位寬
不使用緊縮時,用integer和cardinal,因為字節對齊時SmallInt, ShortInt, Byte等也會佔用4或8字節,計算時仍為32位,而且要先擴展到32位。