[c#] .NET FrameworkはOutOfMemoryExceptionのためにどのようにメモリを割り当てますか?



0 Answers

ランタイム内でメモリ不足状態が発生すると、 ThrowOutOfMemory呼び出しThrowOutOfMemory 。 これはException::GetOOMException呼び出しException::GetOOMExceptionこれはスタック上のオブジェクトを構築し、それをスローされた静的に割り当てられたグローバルインスタンスにコピーします。

これは、管理された例外ではありませんが、 ex.h宣言されているC ++の例外ex.h 。 C ++の例外は、 clrex.cpp内の管理例外に変換されます。この例外には、 clrex.cppに最初に割り当てられて構築された、 appdomain.cpp割り当てられた管理された OutOfMemoryExceptionをスローするコードが含まれています。

注意:これらのソースファイルの中には大きめのものがあり、構文の強調表示がロードされている間にブラウザを数秒間ハングすることがあります。

Tim Schmelterが他の答えに対するコメントでリンクしているコールサイトは、メモリ不足のランタイムとオブジェクトの構築ができないという点に関連していません。

Question

C ++では、ヒープ上にメモリを割り当てずに、値で例外をスローすることは実際可能です。このような状況は理にかなっています。 しかし、.NETフレームワークでは、 OutOfMemoryExceptionは参照型なので、ヒープに割り当てられます。 新しいオブジェクトを作成するのに十分なメモリがないOutOfMemoryException 、.NET FrameworkはOutOfMemoryExceptionためにどのようにメモリを割り当てますか?




Related