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 已初始化的全域性變數和...