2010-10-29 116 views
2

程序何時會收到「內存不足異常」。它是否沒有足夠的虛擬地址範圍或沒有足夠的物理內存?內存不足異常?沒有足夠的虛擬地址範圍:沒有足夠的物理內存

根據我的理解,只有在沒有足夠的虛擬地址可用時纔會發生這種情況,因爲可以通過分頁未使用的部分使物理存儲可用。

請說明。

謝謝, 蘇雷什。

+1

下面是一篇文章,詳細解釋了程序中有多少虛擬地址空間可用:http://blogs.technet.com/b/markrussinovich/archive/2008/11/17/3155406.aspx – 2010-10-29 19:34:43

回答

0

當您用盡程序訪問的可尋址空間。這通常意味着虛擬地址範圍,但是如果你有足夠的RAM,那將是物理內存。

1

可用內存總量=物理(RAM)加頁面文件。

當兩者都已滿時,您將在任何進一步的內存分配請求上得到異常。

在某些系統上,由於內核爲自己預留了一部分物理RAM,所以用戶模式程序剩下來爭奪剩餘部分,這進一步得到了進一步的認可。

+0

Steve - 不完全正確。如果這是一個32位操作系統,則可尋址空間的數量可能會少於實際安裝的RAM。如果進程達到可尋址空間的限制,則會發生異常。 – Oded 2010-10-29 19:31:20

2

如果你看到一個OutOfMemoryException,這大概是一個.Net應用程序。具有諷刺意味的是,你描述的條件非常多,從來沒有。NET中的OutOfMemoryException的來源。

在大多數情況下,最好將OutOfMemoryException視爲OutOfSomeCriticalResourceButNotRAMIronicallyEnoughException。或者更糟:例如,當您嘗試打開無效的圖像文件時,.Net會引發OutOfMemoryException