ドキュメントによると、C# では、「値の型をボックス化すると、Object 参照型のインスタンス内にパッケージ化されます。これにより、値の型をガベージ コレクション ヒープに格納できます。」
「ガベージ コレクション ヒープ」がない場合はどう なりますか? ガベージ コレクション ヒープが完全に割り当てられており、利用可能な「ガベージ コレクション ヒープ」メモリがありませんか? 例外をスローするか、別の場所に割り当てますか?
ドキュメントによると、C# では、「値の型をボックス化すると、Object 参照型のインスタンス内にパッケージ化されます。これにより、値の型をガベージ コレクション ヒープに格納できます。」
「ガベージ コレクション ヒープ」がない場合はどう なりますか? ガベージ コレクション ヒープが完全に割り当てられており、利用可能な「ガベージ コレクション ヒープ」メモリがありませんか? 例外をスローするか、別の場所に割り当てますか?
これは、他のオブジェクトの割り当てと同じです。使用可能なメモリがなく、ガベージ コレクションによっても使用可能にできない場合は、OutOfMemoryException
.
このコードを考えることができます:
int x = 10;
object o = x;
次のように:
int x = 10;
object o = new Int32_Wrapper(x);
Int32_Wrapper
「boxed int」クラスはどこにありますか。(これを C# で明示的に行うことはできませんが、それが基本的な効果です。)
ガベージコレクターのヒープのようなものです。つまり、このメモリ空間に格納されているオブジェクトは、GCによって「検査」されます。ただし、現在のCLR実装には他のヒープがないため、これはヒープのみとして最もよく知られています=)
–アンドレカリル
ガベージコレクションされたヒープが完全に割り当てられると、GCがトリガーされてメモリが解放され、(OS管理対象VMからの)メモリが管理対象ヒープに追加され、使用できなくなるまで、メモリ不足例外がスローされます。