2010-10-29 134 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

相关问题