程式執行過程
阿新 • • 發佈:2019-02-10
程式的執行過程大致分為以下四的步驟:
(1)預處理
(2)編譯
(3)彙編
(4)連結
1.關於預處理:
預處理階段的工作基本上是對源程式做“替代”,主要有:巨集替換、條件編譯、標頭檔案展開、去除註釋;經過這番替換之後,就會生成一個沒有巨集定義,沒有條件編譯、沒有特殊符號的輸出檔案。
2.關於編譯:
編譯階段的工作就是,將上一步預處理後的輸出檔案,即只有常量、變數、以及程式語言的關鍵字的檔案,進行詞法分析、語法分析、語義分析、以及優化後產生的彙編程式碼檔案。
3.關於彙編:
彙編階段的工作就是,將上一步得到的彙編程式碼檔案翻譯成目標機器指令的過程。
4.關於連結:
由於經過以上步驟生成的目標檔案不能立即被執行,因為可能有這樣的情況:一個原始檔引用了另一個原始檔,或者一個原始檔呼叫了庫檔案等;因此,連結階段的主要工作就是,將所有有關的目標檔案彼此相連,使得它們成為一個能讓作業系統執行的整體。其中包含的工作有:地址和空間的分配、符號重定位等工作。
例子:以執行原始檔test.c為例,在linux下上述每一步的操作指令。
(1)預處理
gcc -E test.c -o test.i
(2)編譯
gcc -S test.i -o test.s
(3)彙編
gcc -c test.s -o test.o
(4)連結
gcc test.o