我們知道大多數的IT開發人員,不會使用機器指令來編寫程序,主要的原因是機器指令比較繁瑣與難記,而我們會用人們更加容易記憶的開發語言去開發程序,然後經過編譯器將其翻譯成機器語言,那麼問題來了,編譯器能否將程序翻譯成人們所預期的機器語言呢?我們先來看看編譯器是如何進行語言翻譯的。
使用GCC編譯器可以將程序翻譯成機器語言,步驟如下:
1)讀取源文件,進行詞法分析,將程序中的字符和標識符都進行收集。
2)然後為字符和標識符分配內存地址。
3)根據文法分析,將程序翻譯成目標程序。
過程如下圖所示:
現在舉一個簡單的例子,來看看編譯器的優化前後的變化:
圖2是舉的簡單的例子文件test.c,來說明編譯前後的變化,利用gcc -S test.c 會生成test.s 的彙編文件,如下所示:
這是在沒有加入編譯優化選項生成的彙編代碼,代碼看起來的確非常囉嗦,變量a和變量c被導了好幾手,性能有所影響。
下面看看加入優化選項-O3的效果,如下圖所示:
由上圖可知,加了優化的選項後,彙編程序變得非常的簡單,且性能有所提升,它把結果都計算完後,再傳給變量c和a,可見,編譯器對於我們的程序的生成起著至關重要的作用。
後續再講,謝謝。
閱讀更多 防火牆達人 的文章