Delphi語言優(yōu)化
1)記錄或數(shù)組類型的返回值
C++程序員不會(huì)這樣做,因?yàn)榉祷刂禃?huì)被壓入堆棧,導(dǎo)致時(shí)間效率和空間效率都降低。Delphi無此問題,返回值相當(dāng)于Out參數(shù),由調(diào)用者傳遞內(nèi)存單元指針。所以可以使用記錄或數(shù)組返回值,以增將可讀性和書寫表達(dá)式的方便性。
2)公共表達(dá)式
Delphi只在一個(gè)語句行內(nèi)提取公共表達(dá)式。如果公共表達(dá)式包含函數(shù)調(diào)用或?qū)傩栽L問,則不被提取,即要重復(fù)計(jì)算,因?yàn)樘崛】赡軐?dǎo)致改變語義。
3)const參數(shù)
當(dāng)函數(shù)參量不被改變時(shí),如果參量長度超過4字節(jié)或是接口、字符串、動(dòng)態(tài)數(shù)組類型,使用const參數(shù),可以使編譯器以地址方式傳遞,并且不對(duì)引用技術(shù)做修改。
4)緊縮
Delphi分配存儲(chǔ)單元時(shí)會(huì)分配盡量小的空間。如果足夠小且可放入寄存器內(nèi),則一般會(huì)使用寄存器直接操作。例如長度為4字節(jié)的記錄或數(shù)祖賦值時(shí),編譯器會(huì)自動(dòng)按DWord用32位寄存器處理。
5)算符
整除2或4會(huì)優(yōu)化成右移位,乘2或4會(huì)優(yōu)化成左移位,所以不需特意用移位運(yùn)算,可以寫出更可讀的代碼。但乘除8和其他2的倍數(shù)不會(huì)有此優(yōu)化。
i := i + 1; 和 Inc(i); 一般產(chǎn)生的代碼相同。
6)浮點(diǎn)
Delphi不對(duì)浮點(diǎn)計(jì)算做優(yōu)化,即使加零運(yùn)算也不會(huì)被優(yōu)化掉,而且會(huì)添加很多FWAIT指令。所以寫關(guān)鍵的浮點(diǎn)運(yùn)算時(shí)要自己優(yōu)化好表達(dá)式,自己提取公共表達(dá)式。盡量少用中間變量,因?yàn)楦↑c(diǎn)變量不會(huì)被優(yōu)化掉,即使后面沒有使用也會(huì)寫回內(nèi)存。必要時(shí)用匯編,或者考慮用C。雖然如此,一般情況下,等價(jià)的Delphi和C的浮點(diǎn)程序性能差別不大。
7)with語句
with可以生成隱式中間變量,避免重復(fù)計(jì)算
8)集合
i in [0..31] 比 (i >= 0) and (i <= 31) 快
9)位寬
在不使用緊縮時(shí),用integer和cardinal,因?yàn)樽止?jié)對(duì)齊時(shí)SmallInt, ShortInt, Byte等也會(huì)占用4或8字節(jié),計(jì)算時(shí)仍為32位,而且要先擴(kuò)展到32位。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注