以老師PPT爲標準,借鑑部分教材內容,AlvinZH學習筆記。數組
.1. 目的:提升目標代碼運行效率。時間效率(減小運行時間);空間效率(減小內存容量)。less
原則:進行優化必須嚴格遵循「不能改變原有程序語義」原則。函數
2. 優化的分類學習
從優化的層次,與機器是否有關,分爲:獨立於機器的優化、與機器有關的優化。優化
從優化涉及的範圍,又分爲:局部優化、循環優化、全局優化。code
3. 知足如下三個條件的程序段,稱爲基本塊:內存
基本塊劃分問題編譯
(1)肯定入口語句效率
(2)每一個入口語句直到下一個入口語句或程序結束,之間的語句屬於同一個基本快。編譯原理
1. 利用代數性質(代數變換)
2. 複寫(copy)傳播:如 x:=y 這樣的賦值語句,兩者值相同,有些狀況能夠用y代替x編譯。其實就是將多語句簡化,減小值的傳播過程。
3. 刪除公共達式:具備相同值的子表達式在兩個以上地方出現時,稱它爲公共子表達式。能夠將之刪除至一次,將屢次計算變爲一次。
4. 刪除冗餘代碼:冗餘代碼就是毫無實際意義的代碼,又稱死代碼 (deadcode)或無用代碼(useless code)。永遠不會執行的代碼。
5. 循環優化
6. in_line展開:把過程(或函數)調用改成in_line展開可節省許多處理過程(函數)調用所花費的開銷。省去了函數調用時參數壓棧,保存返回地址等指令。這也僅僅限於簡單的函數。
7. 其餘方法,如控制流方法。
引用說明
- 邵老師課堂PDF - 《編譯原理級編譯程序構造》