一般工程編譯完成後會生成.o 文件 然後通過link 成一個完整的鏡像
ELF 文件一般包含 一下幾個代碼段 :
file header字段裏存放了描述整個文件的基本屬性信息的內容,如程序入口地址,其他各段信息(偏移量和範圍)
.text section:主要是編譯後的源碼指令,是隻讀字段。
.data section :初始化後的非const的全局變量變量或者局部static變量。
.bss:未初始化後的非const全局變量和局部static變量。
rodata字段 是存放只讀數據
common 存放註釋的
堆(heap):堆是用於存放進程運行中被動態分配的內存段,它的大小並不固定,可動態擴張或縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張);當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減)
棧(stack):棧又稱堆棧, 是用戶存放程序臨時創建的局部變量,也就是說我們函數括弧“{}”中定義的變量(但不包括static聲明的變量,static意味着在數據段中存放變量)。除此以外,在函數被調用時,其參數也會被壓入發起調用的進程棧中,並且待到調用結束後,函數的返回值也會被存放回棧中。由於棧的先進先出特點,所以棧特別方便用來保存/恢復調用現場。從這個意義上講,我們可以把堆棧看成一個寄存、交換臨時數據的內存區。