程序何時會收到「內存不足異常」。它是否沒有足夠的虛擬地址範圍或沒有足夠的物理內存?內存不足異常?沒有足夠的虛擬地址範圍:沒有足夠的物理內存
根據我的理解,只有在沒有足夠的虛擬地址可用時纔會發生這種情況,因爲可以通過分頁未使用的部分使物理存儲可用。
請說明。
謝謝, 蘇雷什。
程序何時會收到「內存不足異常」。它是否沒有足夠的虛擬地址範圍或沒有足夠的物理內存?內存不足異常?沒有足夠的虛擬地址範圍:沒有足夠的物理內存
根據我的理解,只有在沒有足夠的虛擬地址可用時纔會發生這種情況,因爲可以通過分頁未使用的部分使物理存儲可用。
請說明。
謝謝, 蘇雷什。
當您用盡程序訪問的可尋址空間。這通常意味着虛擬地址範圍,但是如果你有足夠的RAM,那將是物理內存。
可用內存總量=物理(RAM)加頁面文件。
當兩者都已滿時,您將在任何進一步的內存分配請求上得到異常。
在某些系統上,由於內核爲自己預留了一部分物理RAM,所以用戶模式程序剩下來爭奪剩餘部分,這進一步得到了進一步的認可。
Steve - 不完全正確。如果這是一個32位操作系統,則可尋址空間的數量可能會少於實際安裝的RAM。如果進程達到可尋址空間的限制,則會發生異常。 – Oded 2010-10-29 19:31:20
如果你看到一個OutOfMemoryException
,這大概是一個.Net應用程序。具有諷刺意味的是,你描述的條件非常多,從來沒有。NET中的OutOfMemoryException
的來源。
在大多數情況下,最好將OutOfMemoryException
視爲OutOfSomeCriticalResourceButNotRAMIronicallyEnoughException
。或者更糟:例如,當您嘗試打開無效的圖像文件時,.Net會引發OutOfMemoryException
。
下面是一篇文章,詳細解釋了程序中有多少虛擬地址空間可用:http://blogs.technet.com/b/markrussinovich/archive/2008/11/17/3155406.aspx – 2010-10-29 19:34:43