次のクラスがあるとします:
Class A
{
B b;
C c;
D d;
}
まず、次を割り当てます。
var b1 = new B();
var c1 = new C();
var d1 = new D();
それぞれがb1, c1, d1
85K 未満であるため、小さなオブジェクト ヒープに割り当てられます。それから私は:
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 + d1
85K を超えると想定) に割り当てられますか? なんで?参照b1, c1, d1
は、小さなオブジェクト ヒープ上のオブジェクトを指しています。それでは、なぜa1
LOHに座るのでしょうか?
質問 3: ひっくり返してみましょう。のサイズがb1
85K を超えると、LOH に割り当てられます。しかし、への参照を保存するb1, c1, d1
には、数バイトしか必要ありません。a1
それが小さなオブジェクト ヒープに割り当てられると 信じているのは正しいですか?