【问题标题】:C# memory allocationC# 内存分配
【发布时间】:2010-04-22 21:05:58
【问题描述】:
  • 在 c# 中使用 operator new 可能会失败(例如,如果它需要大内存)? -已解决-
  • 以及如何发现它? -已解决-
  • new 运算符可能会引发哪些其他故障?

谢谢

【问题讨论】:

  • 写一个像 int[] x = new int[100000000000] 这样的单行代码,看看会发生什么!

标签: c# new-operator allocation operator-keyword


【解决方案1】:

如果new 失败,它将抛出OutOfMemoryException。此外,构造函数本身可能会根据实现抛出任何异常。

来自 OutOfMemoryException 的 MSDN 文档:

以下微软中级 (MSIL) 指令抛出 OutOfMemoryException :

  • 盒子

  • 纽华

  • 新对象

【讨论】:

    【解决方案2】:

    调用构造函数的new 运算符可以抛出您可以想象的任何异常。例如,如果 在构造函数中尝试分配大的东西但失败了,那么该异常可能会被捕获并重新引发为更奇特的东西。

    当然,当您开始看到内存不足时,您可能应该认为该进程已病入膏肓,并尽快将其从痛苦中解救出来。

    尽管有相反的谣言,构造函数也可以返回null,即使对于类 - 但这是一个极端边缘情况,接近于病态。

    【讨论】:

    • 只有通过我在别处看到的邪恶代理重定向才能返回 null 还是可以通过其他罕见的非恶意手段实现?
    • @Dan - 假设我们不计算 Nullable<T>,那么是的 - 邪恶的代理是我知道的唯一方法。
    【解决方案3】:

    在 c# 中使用 operator new 可能会失败(如果它需要大内存)?

    是的。 (您可能用完的资源是地址空间,而不是内存本身。)

    以及如何发现它?

    我不明白这个问题。

    【讨论】:

    • 可能的问题是“如何预防”
    • @TriLi 这似乎是一个更好的问题:)
    【解决方案4】:

    是的,它会抛出 OutOfMemoryException

    【讨论】:

      猜你喜欢
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多