2014-03-28 37 views
2

我有一个问题。据我所知,在.net中内存不足的异常可在下列3个方案中提出.Net中创建的内存不足异常对象在哪里?

  1. 拳击
  2. 创建阵列
  3. 创建对象

通常的它时引发托管堆碎片化或没有足够空间容纳对象。我的问题如果没有足够的托管堆,那么OutOfMemoryException对象是在哪里创建的?它不是在托管堆上创建的? .Net框架如何确保堆中总是有足够的空间来创建OutOfMemoryException对象?

请帮忙。我可能会误解某些东西。

+0

Delphi只是在应用程序启动时分配它。 – CodesInChaos

+0

http://www.codeproject.com/Articles/483475/Memory-Limits-in-a-NET-Process将帮助你理解.Net中的内存分配 – Dhawalk

回答

3

堆在.NET框架通过.NET框架本身管理,所以保持必要的空间用于提高这些例外。例如,对于StackOverflow也是如此。

事实上这些异常都无法通过潜在客户进行处理,或者是危险来处理它们,当你的应用程序在这样的条件下(在OutOfMemory例外的情况下)。还有一些应用程序可以处理它,并以某种方式尝试“安全”的客户端,但其结果并不能保证,只是尽力而为。

1

当您的应用程序启动时,运行时会预先创建这些例外并将它们存储在一个静态列表中。如果需要抛出异常,则从此列表中检索并抛出。这种情况发生在OutOfMemoryExceptionStackOverflowException以及其他几个可能会在稍后创建问题的重要例外情况中。