程式記憶體分布

2021-06-19 02:25:46 字數 481 閱讀 1271

乙個完整的程式,在記憶體分布中的分布情況如下:

1、**區

2、全域性資料區

3、堆區

4、棧區

一般程式的由new產生的動態資料存放到堆區,堆用於儲存哪些生存期與函式無關的資料,函式內部的自動變數存放在棧區,區域性變數和函式引數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料(即使是函式內部的靜態區域性變數)也存放在全域性資料區。全域性資料區的資料並不會因為函式的退出而釋放空間。

在多工作業系統中的每乙個程序都執行在乙個屬於自己的記憶體沙盤中,這個沙盤就是虛擬位址空間,在32位模式下它總是乙個4gb的記憶體位址塊。這些虛擬通過頁表對映到物理記憶體,頁表由作業系統維護並被處理器引用。每乙個程序擁有一套屬於它自己的頁表,但是只要虛擬位址被使用,就會作用於這太機器上執行的所有軟體,包括核心本身,因此一部分虛擬位址必須保留給核心使用:

這並不意味著核心使用了那麼多得物理記憶體,僅表示它可支配這麼大得位址空間,可根據核心需要,就其對映到同樣的物理記憶體。

程式占用記憶體分布

乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由 編譯器自動分配釋放 存放函式的引數名,區域性變數 的名等。其操作方式類似於資料結構中的棧。2 堆區 heap 由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類...

程式的記憶體分布

32位的系統中,記憶體空間擁有4gb 2的32次方 的定址能力。大多數的作業系統都會將記憶體空間 中的一部分挪給核心使用,應用程式無法直接訪問這一段記憶體。windows預設情況會將高位址的2gb空間分給核心,而linux缺省會將高位址的1gb空間分配給核心,剩下的空間被稱為記憶體空間。一般來說,應...

C程式記憶體分布

1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數值等。2 堆區 heap 一般由程式設計師分配釋放,隨叫隨到,揮之即走。3 全域性 靜態區 static 全域性變數和靜態變數的儲存是放在一起的,在程式編譯時分配。4 文字常量區 存放常量字串。5 程式 區 存放函式體 包括類的...