如果只是單純的把程式碼翻成機械語言,所執行的效率會很低,但是可以用編譯器優化的一個部分稱為數據流優化(對程式碼的數據進行分析,消除程式碼的冗餘( 多餘無用的))
面相對向的思考:
1.數據抽象
2.特性的繼承
更容易模塊化、維護
并行(parallelism)-指令集VLIW,以前都翻譯成并行程式碼,,但是現在有多處理器技術成熟(熱門),現在翻譯大多為多處理器程式碼。
內存層次結構(memory hierarchy)-記憶體有分很多,速度越快的記憶空間越少,越多的速度比較慢,所以需要優化自己的程式碼,來讓緩存更有效率。
計算機結構的設計
在RISC(Reduced Instruction-Set Computer,精簡指令集計算機)之前的趨勢是越複雜越好,這個結構稱為CISC(Complex Instruction-Set Computer,複雜指令集),但是經過編譯器優化之後就可以簡化指令集,有更好的效能,於是之後就希望以簡單的指令集為主。
現在很常用的x86他有CISC指令集,但是如果要提高效能唯一的辦法就是使用簡單指令。
P24~P25
編譯器前端
由語法分析、詞法分析、中間代碼形式(三位址程式碼) 所組成。
語法分析:把中序式轉成後序式的表示法。
中序式就是一般運算式的寫法,例如:A+B*C 由中序轉成後序式是ABC*+,轉換方式有兩種(括號法&堆疊法)只要搜尋'資料結構'這本書都會介紹,那我簡單介紹這兩種用法。
括號法:
例:A+B*C 用括號刮起來 (A+(B*C)) 因為*比+的優先順序高,所以優先括,把後括號取代為運算符號,所以改成ABC+*。
堆疊法:
規則為遇到數字直接輸出,遇到運算元放入堆疊,如果下面的優先順序小於上面則輸出, 相同優先順序可以相疊。
例:A+B*C
其實不會很難,下面再給個比較複雜的來試試。
例:A*B+C-(D/E)
.
.
.
.
.
.
留言列表