newで構造体を割り当てる場合、ガベージコレクションを気にする必要がないかどうか疑問に思っています。
それらが後でオブジェクトにキャストされた場合はどうなりますか?
public object Func()
{
SMyStruct bla = new SMyStruct();
return bla;
}
newで構造体を割り当てる場合、ガベージコレクションを気にする必要がないかどうか疑問に思っています。
それらが後でオブジェクトにキャストされた場合はどうなりますか?
public object Func()
{
SMyStruct bla = new SMyStruct();
return bla;
}
これは「ボックス化」され、ヒープに割り当てられます。
C#経由のRichter CLR:
ボクシングと呼ばれるメカニズムを使用して、値型を参照型に変換することができます。内部的には、valuetypeのインスタンスがボックス化されている場合は次のようになります。
メモリは管理対象ヒープから割り当てられます。割り当てられるメモリの量は、値型のフィールドに必要なサイズに、管理対象ヒープ上のすべてのオブジェクトに必要な2つの追加のオーバーヘッドメンバー(型オブジェクトポインタと同期ブロックインデックス)を加えたものです。
値型のフィールドは、新しく割り当てられたヒープメモリにコピーされます。
オブジェクトのアドレスが返されます。このアドレスはオブジェクトへの参照になりました。値型は参照型になりました。