自編教材分享:第六章—程序編寫優(yōu)化(三)



過程級優(yōu)化
別名消除
C語言中為了方便編碼為變量定義了別名,但在同一程序中兩個以上的指針引用相同的存儲位置時,將存在指針別名的問題。
優(yōu)化前代碼:
優(yōu)化后代碼:
常數(shù)傳播
常數(shù)傳播是指替代表示式中已知常數(shù)的過程,一般在編譯前期進行。實際程序中可能存在復雜的控制流,編譯器把所有情況的常數(shù)替換都識別出來并對程序實施正確的常數(shù)替換優(yōu)化是較為困難的,因此建議優(yōu)化人員盡量手動進行常數(shù)傳播優(yōu)化。
優(yōu)化前代碼:
優(yōu)化后代碼:
內(nèi)聯(lián)替換
為了節(jié)省函數(shù)調用的時空開銷,可以采用內(nèi)聯(lián)替換的思路優(yōu)化程序,具體優(yōu)化思路為函數(shù)在被調用處復制函數(shù)代碼副本,并通過代碼膨脹將被調函數(shù)體副本直接在調用處進行內(nèi)聯(lián)替換,同時被調過程內(nèi)的形參也將被替換為主調過程內(nèi)的實參。
優(yōu)化前代碼:
優(yōu)化后代碼:
過程克隆
過程克隆是指當一個過程在不同的調用環(huán)境下表現(xiàn)出不同的特性時根據(jù)需要生成該過程的多個實現(xiàn),便于后續(xù)針對每個實現(xiàn)進行不同的優(yōu)化處理,程序中的調用點會根據(jù)其上下文的屬性信息來選擇調用過程實現(xiàn)的某個版本。
優(yōu)化前代碼:
優(yōu)化后代碼:
全局變量優(yōu)化
全局變量尤其是多個文件共享的全局數(shù)據(jù)結構會阻礙編譯器的優(yōu)化。 并且其使得程序員不便追蹤其變化,難以進行手工優(yōu)化。對于并行程序來說,全局變量除非在迫不得已的情況下才建議使用,就算要使用全局變量,也盡量通過參數(shù)傳遞的方式。
優(yōu)化前代碼:
優(yōu)化后代碼:
