花一分鐘,每天學習一個linux的知識點

我們知道大多數的IT開發人員,不會使用機器指令來編寫程序,主要的原因是機器指令比較繁瑣與難記,而我們會用人們更加容易記憶的開發語言去開發程序,然後經過編譯器將其翻譯成機器語言,那麼問題來了,編譯器能否將程序翻譯成人們所預期的機器語言呢?我們先來看看編譯器是如何進行語言翻譯的。

使用GCC編譯器可以將程序翻譯成機器語言,步驟如下:

1)讀取源文件,進行詞法分析,將程序中的字符和標識符都進行收集。

2)然後為字符和標識符分配內存地址。

3)根據文法分析,將程序翻譯成目標程序。

過程如下圖所示:

花一分鐘,每天學習一個linux的知識點

圖1

現在舉一個簡單的例子,來看看編譯器的優化前後的變化:

花一分鐘,每天學習一個linux的知識點

圖2

圖2是舉的簡單的例子文件test.c,來說明編譯前後的變化,利用gcc -S test.c 會生成test.s 的彙編文件,如下所示:

花一分鐘,每天學習一個linux的知識點

圖3

這是在沒有加入編譯優化選項生成的彙編代碼,代碼看起來的確非常囉嗦,變量a和變量c被導了好幾手,性能有所影響。

下面看看加入優化選項-O3的效果,如下圖所示:

花一分鐘,每天學習一個linux的知識點

圖4

由上圖可知,加了優化的選項後,彙編程序變得非常的簡單,且性能有所提升,它把結果都計算完後,再傳給變量c和a,可見,編譯器對於我們的程序的生成起著至關重要的作用。

後續再講,謝謝。


分享到:


相關文章: