在下面的鏈接中,Sdaz MacSkibbons給出的答案給出了虛擬地址系統上的進程地址空間的簡要概述。虛擬地址系統上的進程地址空間
What happens when a computer program runs?
現在假設每個進程都有4GB的虛擬地址空間。現在這是否意味着這個虛擬地址空間的頂部地址將會得到堆棧部分(假設堆棧地址從0開始),並且從底部開始的地址空間將被分配給文本,數據,全局變量和堆。由於堆的大小發生變化,新的malloc分配會將虛擬地址空間頁面直接映射到實際內存,還是會檢查以前分配的虛擬地址頁是否空閒/可用。如果我們需要大量的堆內存(如大於4GB),而不是流程如何支持這些內存,那麼如何?
在此先感謝。
取決於操作系統。用%p創建一個C程序,用於打印出局部變量(stacK)與分配(malloc())變量的地址,靜態變量的地址(程序數據),函數地址(指向函數的指針),地址......。部分虛擬地址空間用於操作系統。還有一些與每個正在運行的線程相關的數據(如rand()的種子值)(FS或GS段寄存器可以用來訪問它,或者它可以被映射到虛擬地址空間中)。 – rcgldr