簡介
常數摺疊( Constant folding)以及 常數傳播( constant propagation)都是編譯器最佳化技術,他們被使用在現代的編譯器中。進階的常數傳播形式,或稱之為稀疏有條件的常量傳播(sparse conditional constant propagation),可以更精確地傳播常數及無縫的移除無用的程式碼。
常量摺疊
常數摺疊是一個在編譯時期簡化常數的一個過程,常數在表示式中僅僅代表一個簡單的數值,就像是整數2,若是一個變數從未被修改也可作為常數,或者直接將一個變數被明確地被標註為常數,例如下面的描述:
多數的現代編譯器不會真的產生兩個乘法的指令再將結果儲存下來,取而代之的,他們會辨識出語句的結構,並在編譯時期將數值計算出來(在這個例子,結果為2,048,000),通常會在中介碼(IR,intermediate representation)樹中進行。
有些編譯器,常數摺疊會在初期就處理完,所以像是C語言的陣列,初始化時就可以接受簡單的運算表示式。而將常數摺疊放在較後期的階段的編譯器,也相當常見。
常數摺疊可以在編譯器前端的IR樹完成,在程式碼轉換為三位址碼之前。常數摺疊也可以在後端完成,作為常數傳播的附加功能。
常數摺疊與跨平台編譯
在實現一個跨平台編譯器時,必須確保目標平台的算術運算的行為與編譯平台結構是吻合的,而且啟動常數摺疊將會改變程式的行為,這在浮點數的運算中是非常重要的,浮點數精確度問題的影響是非常廣的。
參見
•靜態單賦值形式