linux程序中的記憶體結構

2021-09-25 13:51:52 字數 687 閱讀 6558

堆(heap):用於程式動態申請分配和釋放空間。c語言中的malloc和free,c++中的new和delete均是在堆中進行的。正常情況下,程式設計師申請的空間在使用結束後應該釋放,若程式設計師沒有釋放空間,則程式結束時系統自動**。注意:這裡的「堆」並不是資料結構中的「堆」。

全域性(靜態)儲存區:分為data段和bss段。data段(全域性初始化區)存放初始化的全域性變數和靜態變數;bss段(全域性未初始化區)存放未初始化或初始化為0的全域性變數和靜態變數。程式執行結束時自動釋放。其中bbs段在程式執行之前會被系統自動清0,所以未初始化的全域性變數和靜態變數在程式執行之前已經為0。

文字常量區:存放常量字串。程式結束後由系統釋放。

程式**區:存放程式的二進位制**。

#include 

int a = 0;

int b;

int c = 5;

int main()

執行結果:

00404014

00404010

00402000

00404018

00404028

00402004

int a = 0;   //bss段

char *p1;   //bss段

main() 

程序記憶體結構

所有程序都執行在自己的虛擬位址空間,而每個程序都有著自己的記憶體位址,在32位的作業系統中有這4gb的位址空間被使用者和核心訪問,使用者態的空間在0 3gb,核心態在3 4gb。他們都會涉及到3種不同的資料段,分別是 段,資料斷,和堆疊段。下面是3個資料斷的儲存作用。1 段 用於儲存可執行檔案的操作...

linux 程序在記憶體中的布局

先從 linux平台下 虛擬記憶體管理說起,寫c程式時,我們經常會列印乙個指標位址,說這個指標指向某某記憶體位址.可這些位址是真實物理記憶體位址嗎?不是 這些只是虛擬記憶體位址.當乙個c程式調入記憶體開始執行後,在記憶體中就會產生乙個程序.而在多工作業系統中每個程序都擁有一片屬於自己的記憶體空間 記...

linux 程序中的記憶體區域劃分

有幾天沒來了,今天翻到了程序中記憶體區域劃分筆記 就簡單寫寫 1 區 text 主要用於存放功能 函式指標指向該區域,比如函式名。2 唯讀常量區 text 存放字串常量和用const修飾的,並且已經初始化的全域性變數和靜態區域性變數。3 全域性區 資料區 data 存放已經初始化的全域性變數和靜態區...