C#内存分配

3
  • 在C#中使用operator new可能会失败吗(例如,如果需要大量内存)?-已解决-
  • 如何发现这个问题?-已解决-
  • new操作符可能会抛出哪些其他异常?

谢谢


编写一行代码,如 int [] x = new int [100000000000],看看会发生什么! - Doc Brown
4个回答

9
如果new失败,它将抛出OutOfMemoryException异常。此外,构造函数本身可能会根据实现而抛出任何异常。
从MSDN OutOfMemoryException文档中了解到:
以下Microsoft中间语言(MSIL)指令会抛出OutOfMemoryException:
- box - newarr - newobj

4
一个调用构造函数的new操作符可能会抛出你能想象到的任何异常。例如,如果在构造函数内部尝试分配某些大对象并失败,则该异常可能被捕获并重新抛出为更奇特的异常。
当然,在看到内存不足的时候,您应该考虑将该进程视为终末病患,并尽快结束它的痛苦。
构造函数也可以返回null,即使是对于类 - 但这是一个极端的边缘情况,接近病态。

返回 null 值只能通过我在其他地方看到的邪恶代理重定向实现吗?还是可以通过其他罕见的、非恶意的方式实现? - Dan Bryant
@Dan - 假设我们不考虑 Nullable<T>,那么是的 - 邪恶代理是我所知道的唯一方法。 - Marc Gravell

1
在C#中使用operator new可能会失败(如果需要大量内存)吗?
是的。(您可能会耗尽的资源是地址空间,而不是内存本身。)
那么如何发现它呢?
我不理解这个问题。

可能的问题是“如何预防” - Senad Meškin
@TriLi 这个问题看起来更好一些 :) - Betamoo

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接