程序記憶體結構

2021-04-21 10:38:58 字數 626 閱讀 7184

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

1、**段:用於儲存可執行檔案的操作指令和程式定義的常量。其只允許讀,不能進行修改。目的是為了防止**在執行的時候被其他程序修改。乙個程式可以由多個程序組成,多個程序可以共享相同的**段,即當程式被多次執行時,執行相同程式將共享**段。那麼不同程式間**斷是不能共享的。

2、資料段:他的位置緊跟著**段,分為初始化資料段和為初始化資料段。前者用於存放已經初始化的全域性變數和靜態變數,後者用於儲存為初始化的全域性變數。

3、堆疊段:堆疊段中的堆用於存放程序中動態分配的記憶體位址,如,malloc,new函式分配的空間都將在堆中分配,當free火delete時,分配的記憶體將從中刪除。棧用於儲存程式中建立的臨時變數。函式呼叫時,傳遞函式也將被儲存在棧中。在函式呼叫結束後,其返回也將儲存在棧中。起具有先進先出的特點,適合用於儲存和恢復現場。可以將棧看作用於存放臨時資料,進行資料交換的記憶體區域。其大小受作業系統限制,因此從棧中獲得的空間大小有限,而堆的大小只是受限於虛擬記憶體空間,因此使用堆可以獲得較大的記憶體空間,對的位置於資料段臨。

C程式 程序記憶體結構分析

1.每個程序都執行在自己私有的記憶體空間中 即虛擬位址空間 在32位系統中,4gb的程序位址東健被分為使用者空間和核心空間兩個部分。使用者空間佔據著0 3gb 用16進製表示為0xc0000000 而核心空間的範圍是3gb 4gb。對於乙個程序而言,都會涉及3種不同的資料段,分別是 段 資料段和堆疊...

linux程序中的記憶體結構

堆 heap 用於程式動態申請分配和釋放空間。c語言中的malloc和free,c 中的new和delete均是在堆中進行的。正常情況下,程式設計師申請的空間在使用結束後應該釋放,若程式設計師沒有釋放空間,則程式結束時系統自動 注意 這裡的 堆 並不是資料結構中的 堆 全域性 靜態 儲存區 分為da...

程序 共享記憶體

swoole 本身也是個多程序模型。有多個 worker 程序和 master 程序。由於程序之間的變數時不能相互通用的。所以應該怎樣實現程序之間的通訊呢?作業系統中實現程序通訊的方法有多種,其中一種是共享記憶體 是作業系統內比較特殊的一種記憶體,他並不依賴於任何的程序也不屬於任何程序 可以呼叫系統...