程式位址空間

2021-10-08 14:23:40 字數 548 閱讀 9536

乙個全域性變數,在子程序中修改後,列印100,父程序還是列印1

資料不同,表示肯定沒有使用同一塊記憶體空間(一塊記憶體空間不能儲存兩個資料)

父子程序列印的資料不同,但是位址卻是相同的 —— 此處產生矛盾,因為實際程序中訪問的位址都是虛擬位址,且程式位址空間時機上也是乙個程序的虛擬位址空間。

size——表示記憶體大小

code_start / code_end——描述**段的起始與結束,通過這兩個資訊就可以描述出一塊連續完整的線性記憶體空間。

1、程序中**資料的使用都是連續的位址,若直接使用連續的物理記憶體會造成記憶體的浪費。

2、直接訪問物理記憶體會因為缺乏記憶體訪問控制導致程序的不安全

作業系統為程序建立mm_struct-虛擬位址空間的同時,也建立了乙個頁表用於對映虛擬位址與物理記憶體之間的關係

程序使用虛擬位址空間,通過頁表對映物理記憶體,可以實現程序中資料在物理記憶體上的離散式儲存。通過這種方式提高了記憶體利用率;

在頁表中可以直接針對某個位址設定, 這個位址的訪問許可權——這個位址是唯讀的——通過這種方式實現記憶體訪問控制。

程式位址空間

上圖也可以進一步細分 1.棧區 棧又叫堆疊,通常存放程式臨時建立的非靜態區域性變數 即函式大括號中定義的區域性變數 以及函式呼叫時的引數,呼叫後的返回值等。由編譯器自動分配釋放。棧是向下增長的。棧具有 小記憶體 自動化 可能會溢位 的特點。棧頂的位址和棧的最大容量一般是系統預先規定好的,通常不會太大...

c程式位址空間

我們都知道指標在計算機中占有很重要的部分,但指標究竟是什麼呢?有人說 指標就是位址,因為指標都是指向乙個位址空間的,這麼說也沒毛病,但不準確。例如 int a 10 int p a 很顯然指標變數p中所存的是 a,不過這只是指標變數的一部分,是指標變數作為左值的表現,還有指標變數作為右值的呢,那麼p...

Linux 程式位址空間

我們所說的位址是乙個虛擬的位址空間,只是一堆位址編號的描述,非物理記憶體位址 虛擬位址不具備儲存能力,資料儲存依然放到物理記憶體中 程序中訪問的位址都是虛擬位址,非物理記憶體位址 程式位址空間也是乙個虛擬位址空間,是作業系統為程序通過乙個mm struct 結構體所描述的乙個假的位址空間 mm st...