2011-01-18 26 views
6

私はこの質問が何千回も聞かれたと想像することができますが、私は答えを見つけることに多くの運がなかったし、これは必要以上に好奇心から外れています。ヒープに格納されているオブジェクトの値の型は?

C#のナットとボルトを掘り下げると、オブジェクトがヒープに格納されているのか、ヒープに格納されているオブジェクト内の値の型がスタックに入れられているのか不思議でした。

答えて

6

これらはヒープに格納され、参照型に割り当てられたメモリ内に格納されます。さらに、value types are often stored in places other than "the stack"。ただし、CLI仕様では、値型を格納するメモリプールがどこにあるかは指定されていません。実装の詳細は重要ではありません。

+0

素晴らしい記事、ありがとう! – BoredOfBinary

3

これらは、オブジェクト自体とともにヒープに格納されます。これについて考える良い方法は、オブジェクト(その状態の一部としての値型を持つ)がヒープ上に割り当てられたときに、その値の型もそこに存在しなければならないということです。そうでなければ、その値の型は、オブジェクトを作成したコードのために。

1

はい、それらはヒープの一部として格納されます。しかし、Eric Lippertが複数の機会に記述したように、実装の詳細はすべてです。私はあなたが彼のブログ記事を読むことをお勧めします。thisが最新であり、thesetwoも重要です。

+0

素晴らしい記事、ありがとうございました! BTWあなたの本を愛し、それを今読んでいる! – BoredOfBinary

9

Andrew Hareが正しいです。詳細については、Eric Lippert's blog entryを参照してください。私は、「値のタイプがスタックに行く」という神話によって乱されてい

...通常、間違って記載されている:文は、値の型が上保存することができる」である必要がありますスタック "は、より一般的な"値タイプ "の代わりに常にスタックに格納されます。

+1

+1「私は神話に邪魔されています。 – Gabe

関連する問題