全局變量、局部變量在內存中的位置

一般工程編譯完成後會生成.o 文件 然後通過link 成一個完整的鏡像

 ELF 文件一般包含 一下幾個代碼段 :

 file header字段裏存放了描述整個文件的基本屬性信息的內容,如程序入口地址,其他各段信息(偏移量和範圍)

.text section:主要是編譯後的源碼指令,是隻讀字段。

.data section :初始化後的非const的全局變量變量或者局部static變量。

.bss:未初始化後的非const全局變量和局部static變量。

rodata字段  是存放只讀數據

common   存放註釋的

堆(heap):堆是用於存放進程運行中被動態分配的內存段,它的大小並不固定,可動態擴張或縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張);當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減) 
  
棧(stack):棧又稱堆棧, 是用戶存放程序臨時創建的局部變量,也就是說我們函數括弧“{}”中定義的變量(但不包括static聲明的變量,static意味着在數據段中存放變量)。除此以外,在函數被調用時,其參數也會被壓入發起調用的進程棧中,並且待到調用結束後,函數的返回值也會被存放回棧中。由於棧的先進先出特點,所以棧特別方便用來保存/恢復調用現場。從這個意義上講,我們可以把堆棧看成一個寄存、交換臨時數據的內存區。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章