編譯鏈結原理

2021-09-25 10:54:28 字數 911 閱讀 9297

1.預編譯階段:(生成.i檔案)

(1)刪除#define,並展開所有的巨集進行文字替換

(2)遞迴展開#include

(3)處理所有條件預編譯指令,如:#if、#endif、#ifdel等

(4)刪除注釋://、/* */

(5)新增行號和檔名標識

(6)保留所有的#pragma編譯器指令,待編譯器使用

2.編譯階段:(生成.s檔案)

把預處理完的檔案進行

(1)詞法分析

(2)語法分析

(3)語義分析

(4)**優化

(5)生成彙編指令

3.彙編階段:(生成.o檔案,即目標檔案)

(1)翻譯指令

4.鏈結階段:(生成.exe檔案,即可執行檔案)

(1)合併段和符號表

(2)符號解析(und符號引用的地方找到符號定義的地方)

(3)分配位址和空間

(4)符號重定位

5.執行階段:

執行程式,系統都做了些什麼?

1.建立核心對映結構體,建立虛位址空間和物理記憶體的對映。

2.載入指令和資料。

3.入口位址寫入下一行指令暫存器。

虛擬位址空間一般呈現出來是分為2部分:3g使用者空間(包括128m的保留區)、1g核心空間。

虛擬位址空間裡面詳細的結構為:

從上往下的結構分布為

編譯鏈結原理

從源 到可執行程式,需要經歷以下幾個過程 預處理 編譯 彙編 連線。1.預處理 預處理主要是處理以 開頭的預編譯指令,包括 include define if等 刪除注釋 新增行號以及標頭檔案展開。2.編譯 編譯的主要工作是詞法分析 語法分析 優化編譯,將源 翻譯成彙編 3.彙編 彙編是將彙編 翻譯...

編譯鏈結原理

32位計算機,每個程式都有4g的虛擬位址空間。首先虛擬位址空間分為兩大塊,乙個是使用者空間,乙個是核心空間。使用者空間佔3g的大小,並且它是每個程序所獨有的,它的開頭128m存放的是我們無法訪問的地方。1 預編譯 生成 i 檔案 操作命令 gcc e main.c o main.i 具體內容 1 巨...

編譯鏈結原理

32位計算機,每個程式都有4g的虛擬位址空間。首先虛擬位址空間分為兩大塊,乙個是使用者空間,乙個是核心空間。使用者空間佔3g的大小,並且它是每個程序所獨有的,它的開頭128m存放的是我們無法訪問的地方。text c語言的編譯後執行語句都編譯成機器 儲存在.text段 data 已初始化的全域性變數和...