2010-08-04 115 views
2

我在Windows XP上將虛擬內存大小設置爲756 MB。但在msdn上閱讀時,它表示默認情況下,32位操作系統上的每個進程的虛擬內存爲4 GB。它與我設置的虛擬內存大小有何不同?虛擬內存大小

**Memory**  **range**     **Usage** 
Low 2GB (0x00000000 through 0x7FFFFFFF) Used by the process. 
High 2GB (0x80000000 through 0xFFFFFFFF) Used by the system. 

另外,每個過程的範圍如何?

+1

屬於superuser.com – 2010-08-04 15:42:32

+0

@Paul不一定。從本質上講,這是一個編程問題(即使被非程序員詢問) – 2010-08-04 15:44:09

+0

有多少物理內存是需要考慮的。如果有3.25 GB的物理內存,那麼將它與虛擬內存相結合可以提供4 GB。 – 2010-08-04 15:45:06

回答

3

您的頁面文件設置爲756 Mb。頁面文件就像額外的RAM,但由磁盤支持。然而,虛擬內存是不同的,而且有點複雜。

每個進程獲得4 Gb的地址空間。這是一個32位指針的範圍,所以'可以很好地工作。其中一半是爲內核(操作系統)保留的,並且在每個進程中都是相同的。另一半是流程本身,對於這個流程是獨一無二的。

當進程請求時,操作系統將「頁面」分配給內存的私有部分。這些頁面在進程的地址空間中有一個插槽,與物理RAM的內容無關。實際上,如果他們目前沒有被使用,他們甚至可能不在RAM中。如果操作系統需要一些物理內存作爲其他內容,操作系統會將頁面「交換」到頁面文件中。

一個重要的事情要記住的是,您的進程中的地址0x10000與另一個進程中的0x10000完全不同。

幸運的是,操作系統將所有這一切雜亂無章,所以您不必這樣做。

1

windows中的虛擬內存設置僅影響虛擬內存頁面文件的大小,而不影響分配給進程的虛擬內存的總大小。

2

這是一個太大的主題,在這裏的答案充分覆蓋。你幾乎肯定需要閱讀一本書(我推薦Jeffrey Richter的這類書的主題)。

4 Gb是關於地址空間。 756 Mb是關於後備商店。

很多東西(尤其是可執行文件的內容)使用地址空間而不使用備份存儲。當您執行程序時,該程序的可執行文件(及其使用的所有DLL)將映射到地址空間。然後,在逐頁的基礎上,根據需要將這些可執行文件的片段放入物理內存中。

756 Mb是額外的存儲空間來「擴展」RAM空間 - 但這通常只用於數據,而不是代碼;代碼已存儲在可執行文件中,因此係統會在需要時直接從可執行文件讀取數據。 756 Mb主要用於您在計算機運行時創建或修改的數據(雖然「修改/創建」的定義可能很模糊 - 例如,您已加載的網頁的內容將包含在內因爲你讓它進入記憶中,即使你沒有創建它或根本沒有改變它)。