C語言編譯過程和記憶體分割槽

2021-08-01 07:28:21 字數 719 閱讀 1241

1預處理:巨集定義展開、標頭檔案展開、條件編譯等,同時將**中的注釋刪除,這裡並不會檢查語法    命令:gcc -e hello.c -o hello.i

2編譯:檢查語法,將預處理後檔案編譯生成彙編檔案   命令:gcc -s hello.i -o hello.s

3彙編:將彙編檔案生成目標檔案(二進位制檔案)     命令gcc -c hello.s -o hello.o

c語言記憶體分為4個大區

1  **區:載入的是可執行檔案**段,所有的可執行**都載入到**區,這塊記憶體是不可以在執行期間修改

2靜態區:靜態區包含全域性初始化資料區/靜態資料區和未初始化資料區;

全域性初始化資料區/靜態資料區載入的是可執行檔案資料段,儲存於資料段(全域性初始化,靜態初始化資料,文字常量(唯讀))的資料的生存週期為整個程式執行過程

未初始化資料區載入的是可執行檔案bss段,位置可以分開亦可以緊靠資料段,儲存於資料段的資料(全域性未初始化,靜態未初始化資料)的生存週期為整個程式執行過程

3棧區:棧是一種先進後出的記憶體結構,由編譯器自動分配釋放,一般存放函式的引數值、返回值、區域性變數等。在程式執行過程中實時載入和釋放,因此,區域性變數的生存週期為申請到釋放該段棧空間

4堆區:堆是乙個大容器,它的容量要遠遠大於棧,但沒有棧那樣先進後出的順序。用於動態記憶體分配。堆在記憶體中位於bss區和棧區之間。一般由程式設計師分配和釋放,若程式設計師不釋放,會造成記憶體洩露,程式結束時由作業系統**。

C語言記憶體分割槽

計算機的記憶體空間主要分為三個區 系統程式區 應用程式區和資料區 其中資料區又分為系統程式資料區和應用程式資料區兩類。大家在學習過程中編制的 c語言程式就屬於應用程式,程式 本身存放在程式區,而程式執行時所需變數的儲存空間則在應用程式資料區分配,該資料區又分為靜態資料區 堆疊區和堆區三種,程式執行時...

C和C 記憶體分割槽

在c和c 編譯的程式大致可以分為五個區 1.堆區 由程式設計師自己分配和釋放,如果程式設計師一直沒有釋放這部分記憶體,那麼程式結束的時候會由os 這裡開闢空間一般是new,malloc等函式。要注意的是,像我們malloc開闢一片空間出來,同時也向裡面賦值了,但是程式執行的過程我們去把這一片空間釋放...

C語言編譯過程

編譯,編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。c源程式標頭檔案 預編譯處理 cpp 編譯程式本身 優化程式 匯程式設計序 鏈結程式 可執行檔案 1.編譯預處理讀...