しかし、GCが管理されていないコードだけを収集することは決してないと思います。つまり、Structureタイプはアンマネージコードです。(私はそうは思わない)。
あなたがここで何を求めているのかわかりません。
または、GCがスタックではなくヒープのみを処理することを意味しますか?
はい、いいえ。GCは、参照型のインスタンスに必要なメモリを処理します(常にマネージヒープで作成されます)。「スタック」は、現在の実行スレッドに関連付けられたメモリの一部として表示できます。スタックには、マネージヒープに割り当てられた参照型へのハンドルを含めることができます。この場合、GCは「気にかけます」:スタック上のこれらの参照が存在するまで、これらのインスタンスのマネージヒープからメモリを収集しません。スタックには、値型のインスタンス(!への参照ではない)を含めることもできます。その場合、GCは気にしません...
はいの場合、intデータ型はどうですか。intはクラスではなく構造体です。したがって、int型のオブジェクトを定義した場合、それはGCによって管理されませんか?
この質問は少し誤解を招きます。int
スタック上ののインスタンスを「割り当てる」としましょう。
void Foo()
{
// ...
int tTmp;
//...
}
この場合、GCはを気にしませんtTmp
。スコープ外になると、現在のスレッドのスタックに配置され、削除されます。しかし、これを行う場合:
void Foo()
{
//...
var tTmp = new int [] {
1, 2, 3, 4
};
//...
}
次に、4つの整数の配列がマネージヒープ上に作成され、GCが処理しtTmp
ます。また、配列の内容に必要なメモリを「間接的に」処理します。これは、たまたま4つの整数に必要なスペースです。