編譯階段:
main.c---預編譯--->main.i----編譯-->main.s----彙編--->*.o/*.obj(二進位制可重定位目標檔案)
預編譯:刪注釋,#:預編譯指令
編譯:語法、語義分析,**的優化,彙總所有的符號
彙編:把彙編指令轉化成特定平台的機器碼
資料產生符號。
指令只產生乙個符號(函式名)。
1.合併所有obj檔案的段(所有相同屬性的段進行合併,組織在乙個頁面上),並調整段偏移和段長度,合併所有符號表進行符號解析(所有obj符號表中對符號引用的地方都要找到該符號定義的地方),分配記憶體位址
2.符號的重定位(鏈結的核心)。
main.o檔案組成格式:
強符號:已初始化的,在**中不能出現同名的強符號
弱符號:未初始化的
程式的執行---》程序
./a.out
1、建立虛擬位址空間到物理記憶體的對映(建立核心位址對映結構體),建立頁目錄和頁表。
2、載入**段和資料段
3、把可執行的檔案入口位址寫到cpu暫存器裡面
c程式的執行過程
1.hello程式的生命週期是從乙個高階c語言程式開始的,然後為了在系統上執行hello.c程式,每條c語句都必須被其他程式轉化為一系列的低階機器語言指令。2.預處理階段。預處理器 cpp 根據以字元 開頭的命令,修改原始的c程式。include 命令告訴預處理器讀取系統標頭檔案stdio.h的內容...
C 程式執行過程
要理解乙個程式的執行過程,首先要理解什麼是編譯器。我們用c語言寫的程式,計算機只能識別機器語言 二進位制指令 計算機並不能理解。因此,必須將c語言轉換為機器語言。編譯器就是用來實現這一功能的。編譯器將源 檔案按照一定的對應規則映射程計算機能夠識別的二進位制指令。關於原始檔 目標檔案和可執行檔案 原始...
C 程式執行過程
第一部 進入static void main 2.1 執行private system.componentmodel.container components null 作用是container 類是icontainer 介面的預設實現。容器是封裝和跟蹤零個或更多個元件的物件。在此上下文中,包容是指...