C#中构造OutOfMemoryException没有内存时会发生什么?

What happens when there is no memory to construct an OutOfMemoryException in C#?

我发现 System.Exception 需要很多内存分配(许多 String,甚至 IDictionary)。当没有足够的内存来构造 OutOfMemoryException 时会发生什么?

经过搜索,我发现了一个类似的问题:What happens when there's insufficient memory to throw an OutOfMemoryError? CLR behavior like that?

我找到了coreclr的源代码。似乎 CLR 预分配了一些异常 类.

正如你(Cu2s)提到的,框架预先分配了一些对象。 OutOfMemory 不是唯一的一个。 Whosebug当然也是需要的。

查看来源here

还有这个blog post

你可以在 WinDbg 或其他工具中自行查看。

例如,当我 运行 此代码时:

static void Main()
{
    Console.Read();
}

我在堆中看到以下内容: