一條程序的棧區、堆區、資料區和**區在記憶體中的對映
1>棧區:主要用來存放區域性變數, 傳遞引數, 存放函式的返回位址。.esp 始終指向棧頂, 棧中的資料越多, esp的值越小。
2>堆區:用於存放動態分配的物件, 當你使用 malloc和new 等進行分配時,所得到的空間就在堆中。動態分配得到的記憶體區域附帶有分配資訊, 所以你 能夠 free和delete它們。
3>資料區:全域性,靜態和常量是分配在資料區中的,資料區包括bss(未初始化資料區)和初始化資料區。
注意:
1)堆向高記憶體位址生長;
2)棧向低記憶體位址生長;
3)堆和棧相向而生,堆和棧之間有個臨界點,稱為stkbrk。
1、一條程序在記憶體中的對映
假設現在有乙個程式,它的函式呼叫順序如下:
main(...) ->; func_1(...) ->; func_2(...) ->; func_3(...),即:主函式main呼叫函式func_1; 函式func_1呼叫函式func_2; 函式func_2呼叫函式func_3。
當乙個程式被作業系統調入記憶體執行, 其對應的程序在記憶體中的對映如下圖所示:
來自部落格
java中String的儲存位置
public class test string在對在編譯時可以確定的常量會做一定的優化,把其放在字串常量池中。ab1 ab2為true 和 new出來的物件都是儲存在堆內 物件引用都是儲存在棧內 string a a 這條語句在執行的時候,會在常量池內建立乙個string物件,內容為a,a指向這個...
Fabric區塊資料的儲存位置
byfn.sh up啟動1個示例網路,在該指令碼中有一行命令用於啟動docker docker compose f docker compose cli.yaml f docker compose etcdraft2.yaml up ddocker compose cli.yaml檔案定義了5個卷標...
C 中資料儲存的位置
乙個由 c c 編譯過的程式占用的記憶體分為以下幾個部分 棧區 就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。堆區 動態記憶體分配 通過new和malloc分配,由delete或free手動釋放或者程式結束自動釋放。動態記憶體的生存期...