1. 程式人生 > >【C語言】淺析編譯原理

【C語言】淺析編譯原理

致讀者:

提到“編譯原理”,大部分人的首要反應就是苦惱。確實,編譯原理這一部分的內容在計算機學習中是比較難以理解的一部分。首次接觸編譯原理,我也感覺很複雜,難以理解。但是當看過幾次之後,對於一些簡單知識點的理解就有點眉目了。在這裡就將有點眉目的知識寫一下。

編譯原理:

要了解編譯原理,首先,我們一起來來看看一個程式具體的編譯過程吧。

綜上可見:

● 組成一個程式的每個原始檔通過編譯過程分別轉換為目的碼。

● 每個目標檔案由連結器捆綁在一起,同時引入標準C函式庫中任何被該程式所用到的函式,當然也可以搜尋到個人工作目錄路徑下的庫函式。

詳解---編譯+連結:

瞭解了整個程式編譯過程後,然後我們就來看一個原始檔如何具體被編譯成目標可執行檔案的吧。

綜上可知:

程式在執行過程中要經過兩個環境:翻譯環境,執行環境。

翻譯環境:原始碼轉換為機器指令。

執行環境:用於實際執行程式碼。

編譯具體步驟如下:

綜上可知;一個原始檔經過編譯過程也是相當複雜的,其中涉及的幾個步驟:

結合linux系統敘述:

1.預處理 選項 gcc -E test.c -o test.c

預處理完成就停下來,產生結果放在test.i檔案中。

2.編譯 選項 gcc -S test.c

編譯完成之後就停下來,結果儲存在test.s中。

3.編譯 gcc -C test.c

彙編完成之後就停下來,結果儲存在test.o中。

執行環境:

程式執行過程:

● 程式必須載入記憶體中。在有作業系統的環境中:一般此過程由作業系統完成。獨立環境中,程式載入必須手工完成,也可能通過可執行程式碼置入只讀記憶體來完成。

● 程式的執行便開始。接著呼叫main()函式。

● 開始執行程式程式碼。這個時候程式將使用一個執行時堆疊,儲存函式的區域性變數,函式引數,返回資料和返回的地址。同時也可以使用靜態記憶體,儲存於靜態記憶體中的變數在程式的整個執行過程中一直保留它們的值。

● 終止程式。正常終止main函式,也可能會中途意外終止。

以上簡單介紹程式編譯過程,如有不正之處,歡迎各位來跟小編一起討論!