一般工程編譯完成後會生成.o 檔案 然後通過link 成乙個完整的映象
elf 檔案一般包含 一下幾個**段 :
file header欄位裡存放了描述整個檔案的基本屬性資訊的內容,如程式入口位址,其他各段資訊(偏移量和範圍)
.text section:主要是編譯後的原始碼指令,是唯讀字段。
.data section :初始化後的非const的全域性變數變數或者區域性static變數。
.bss:未初始化後的非const全域性變數和區域性static變數。
rodata欄位 是存放唯讀資料
common 存放注釋的
堆(heap):堆是用於存放程序執行中被動態分配的記憶體段,它的大小並不固定,可動態擴張或縮減。當程序呼叫malloc等函式分配記憶體時,新分配的記憶體就被動態新增到堆上(堆被擴張);當利用free等函式釋放記憶體時,被釋放的記憶體從堆中被剔除(堆被縮減)
棧(stack):棧又稱堆疊, 是使用者存放程式臨時建立的區域性變數,也就是說我們函式括弧「{}」中定義的變數(但不包括static宣告的變數,static意味著在資料段中存放變數)。除此以外,在函式被呼叫時,其引數也會被壓入發起呼叫的程序棧中,並且待到呼叫結束後,函式的返回值也會被存放回棧中。由於棧的先進先出特點,所以棧特別方便用來儲存/恢復呼叫現場。從這個意義上講,我們可以把堆疊看成乙個寄存、交換臨時資料的記憶體區。
區域性變數和全域性變數在記憶體中的儲存位置
靜態儲存方式 是指在程式執行期間分配固定的儲存空間的方式。動態儲存方式 是在程式執行期間根據需要進行動態的分配儲存空間的方式。使用者儲存空間可以分為三個部分 1 程式區 2 靜態儲存區 3 動態儲存區 全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式行完畢就釋放。在程式執...
全域性變數和區域性變數在記憶體中的區別
static函式和普通函式區別作用域記憶體儲存數量 關於變數訪問速度的相關備忘 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等 操作方式類似於資料結構中的棧 2 堆區 heap 由程式設計師分配釋放,如果不釋放可能由os 但區別與資料結構中的堆,其分配方式類似於鍊錶 ...
全域性變數與區域性變數在記憶體中的區別
全域性變數儲存在記憶體的全域性儲存區中,占用靜態的儲存單元 區域性變數儲存在棧中,只有在所在函式被呼叫時才動態地為變數分配儲存單元。該題目考查的知識點是變數的儲存型別及性質。c語言經過編譯之後將記憶體分為以下幾個區域 2 堆 heap 用於程式動態申請分配和釋放空間。c語言中的malloc和free...