在C++中,实际上可以在没有分配内存的情况下按值抛出异常,所以这种情况是有意义的.但是在.NET framework OutOfMemoryException是一种引用类型,因此它是在堆上分配的.

推荐答案

它由运行时预先分配.如果您查看任何托管进程的堆,就会发现该异常的一个实例.

以下是Hello World应用程序的预分配例外:

0:003> !dumpheap -stat -type Exception
Statistics:
      MT    Count    TotalSize Class Name
735f2920        1           84 System.ExecutionEngineException
735f28dc        1           84 System.StackOverflowException
735f2898        1           84 System.OutOfMemoryException
735f2744        1           84 System.Exception
735f2964        2          168 System.Threading.ThreadAbortException

.net相关问答推荐

使用PowerShell在Windows容器内安装exe

.NET发布的应用程序运行与开发不同的端口

Docker镜像mcr.microsoft.com/dotnet/aspnet:8.0不能在Windows上构建

跨请求共享数据

在本地运行 Azure 函数会在 .NET7 升级后出现无运行时错误

如何将 Javascript 日期时间转换为 C# 日期时间?

.NET 的 Visual Studio 调试器提示和技巧

为什么我得到 411 Length required 错误?

抛出 ArgumentNullException

如何删除只读文件?

大型 WCF Web 服务请求因 (400) HTTP 错误请求而失败

如何创建只读依赖属性?

关于 Enumerable.Range 与传统 for 循环的 foreach 的思考

如何将 XPath 与 XElement 或 LINQ 一起使用?

POCO 是什么意思?

使用 C# 设置全局热键

如何使用 DateTime 指定一天中的最晚时间

.NET 委托类型的正确命名约定?

如何从 WCF REST 方法返回自定义 HTTP 状态代码?

有没有一种简单的方法来判断 .NET Framework 版本?