(1)預編譯過程:(.i)
1.刪除#define文字替換
2.#if#endif #elif
3.#include遞迴展開
4.刪除注釋
5.新增行號(主要目的是為了方便除錯)
6.保留#pragma
(2)編譯(.s)
1.詞法分析(例:int 8a=10//變數不能以數字開頭
2.語法分析(根據一條表示式分析)
3.語義分析(根據上下文分析)
4.**優化
5.生成彙編指令
(3)彙編過程(.o)
翻譯指令
(4)鏈結(.exe)
1.合併段和符號表,確定段大小起始偏移
2.符號解析
3.分配位址空間
4.符號重定位
執行過程:
1.建立虛擬位址空間和物理記憶體的對映(核心對映結構體)(linux下程序控制塊)
建立目錄,頁表
2.載入指令和資料
3.入口位址寫入下一行指令暫存器
虛擬位址分布圖:
編譯鏈結執行原理 虛擬位址空間布局
1 早期記憶體分配機制 在早期的計算機中,要執行乙個程式,會把這些程式全都裝入記憶體,程式都是直接執行在記憶體上的,也就是說程式中訪問的記憶體位址都是實際的物理記憶體位址。當計算機同時執行多個程式時,必須保證這些程式用到的記憶體總量要小於計算機實際物理記憶體的大小。但是同時存在以下3個問題 1 程序...
c 編譯鏈結執行原理及虛擬位址空間布局
當我們寫好.c cpp檔案時 此時檔案還不能執行 因為他要經過以下的四步才可以執行 c cpp 生成.i 編譯 生成.s 彙編 生成.o 鏈結 生成.exe 1.define巨集替換 1.詞法分析 指令翻譯成二進位制 1.合併段和符號表 2.include 遞迴展開 2.語法分析 2.符號解析 3....
編譯鏈結執行原理 編譯鏈結執行過程
乙個.c cpp源程式檔案要最後變成.exe windows 或者.out linux 可執行檔案,要經過編譯和鏈結過程。四個步驟 預編譯,編譯,彙編,連線 一 預編譯 處理以 開頭的預編譯指令,比如 include,define等,規則如下 1 刪除所有的 define,並展開所有的巨集替換 文字...