close

如果只是單純的把程式碼翻成機械語言,所執行的效率會很低,但是可以用編譯器優化的一個部分稱為數據流優化(對程式碼的數據進行分析,消除程式碼的冗餘( 多餘無用的))

面相對向的思考:

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+*。

 

堆疊法:

規則為遇到數字直接輸出,遇到運算元放入堆疊,如果下面的優先順序小於上面則輸出, 相同優先順序可以相疊。

image

image

 

 

例:A+B*C

image

 

 

 

其實不會很難,下面再給個比較複雜的來試試。

例:A*B+C-(D/E)

.

.

.

.

.

.

image

 

 

arrow
arrow
    創作者介紹
    創作者 讀書小天地 的頭像
    讀書小天地

    書籍分享天地

    讀書小天地 發表在 痞客邦 留言(0) 人氣()