次のクラスがあるとします:
Class A
{
B b;
C c;
D d;
}
まず、次を割り当てます。
var b1 = new B();
var c1 = new C();
var d1 = new D();
それぞれがb1, c1, d185K 未満であるため、小さなオブジェクト ヒープに割り当てられます。それから私は:
var a1 = new A { b = b1, c = c1, d = d1 };
質問 1:のメモリ!DumpHeap -stat使用量にAは、メンバー変数によって占有されているメモリが含まれますか? そうでない場合、実際には何が含まれていますか?
編集: この投稿でこの質問に対する回答が見つかりました: http://blogs.msdn.com/b/tess/archive/2005/11/25/dumpheap-stat-explained-debugging-net-leaks.aspx。Aのメモリ使用量には、が占有するメモリが含まれていないことは理にかなっていb1, c1, d1ます。b1, c1, d1これには、参照自体を格納するために必要なメモリが含まれます。
質問 2:a1大きなオブジェクト ヒープ (サイズがb1 + c1 + d185K を超えると想定) に割り当てられますか? なんで?参照b1, c1, d1は、小さなオブジェクト ヒープ上のオブジェクトを指しています。それでは、なぜa1LOHに座るのでしょうか?
質問 3: ひっくり返してみましょう。のサイズがb185K を超えると、LOH に割り当てられます。しかし、への参照を保存するb1, c1, d1には、数バイトしか必要ありません。a1それが小さなオブジェクト ヒープに割り当てられると 信じているのは正しいですか?