1. ホーム
  2. c#

[解決済み] OutOfMemoryExceptionが発生した場合、.NETフレームワークはどのようにメモリを確保するのですか?

2022-05-11 04:09:05

質問

C++では、ヒープ上にメモリを確保することなく値によって例外を投げることが実際に可能なので、この状況は理にかなっています。しかし、.NET フレームワークでは OutOfMemoryException は参照型であるため、ヒープ上に確保されます。 .NET フレームワークでは、どのようにして 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