1. 程式人生 > >虛擬內存

虛擬內存

部分 運行 這也 linu 情況 邏輯地址 管理 cnblogs 行數據

虛擬內存這個概念,大家都不會陌生。有人會說虛擬內存還不簡單,不就是在內存不夠的時候,

就把外存當內存來使用,這種說法有一定的道理,但顯然不準確。

在最開始內存只有128M或者256M時,內存顯然是不夠的,在這種情況下說內存不夠的話,拿外存

來頂替,這種說法還過得去。

但現在8g內存,16g內存,甚至32g內存都很普遍,現在的內存顯然是足夠用的,但我們仍然需要虛擬內存,

上面那種說法顯然站不住腳。

下面開一個遊戲,本人電腦內存8G

技術分享圖片

可以看到RAM一欄中,3853MB是指內存的消耗,而後面的5408MB則是虛擬內存消耗(更準確的是分頁文件),這裏內存顯然沒有超過8G,

那為什麽還需要虛擬內存呢?

為了解釋虛擬內存,我們首先要弄清楚虛擬地址和真實的物理地址。

虛擬地址也叫邏輯地址:

技術分享圖片

上圖的程序輸出了指針b指向的地址0x6afef8,這是用16進制表示的,但這個並不是真實的地址,只是邏輯上的地址。

作為計算機用戶,我們並不能接觸真實的物理地址,只能接觸到邏輯地址,而邏輯地址到物理地址的映射,是由操作系統

完成的,準確來說是通過分頁和分段的技術完成的。邏輯地址的大小是人為確定的,一般會比物理地址大很多,當程序

要訪問的資源找不到時,可以將其調入到內存中,沒有用的資源調入到外存。這也就是常說的頁面置換,這樣就好像

我們有很大的’內存‘空間。通過這種方式它使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間),

而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。

通過這種方式可以加快程序的運行速度,同時又做到了內存容量變大的效果。

目前,大多數操作系統都使用了虛擬內存,如Windows家族的“虛擬內存”;Linux的“交換空間”等。

當然資源頻繁的調入和調出,勢必會降低運行速度,讓系統變得特別卡,這個時候就可以考慮加內存條了。

總結:虛擬內存就是邏輯上的內存,它是一種內存管理技術,它管理邏輯地址到物理地址的映射,通過資源的調入和調出

達到了內存變大的效果。

虛擬內存