创建类的属性时如何分配内存?

时间:2016-05-18 07:50:39

标签: c# memory-management garbage-collection

我有以下课程:

public class A
{
    public List<string> AList { get; set; }
}

然后我创建了一个类的对象:

A objectA = new A();
objectA.AList = new List<string>() { "1", "2", "3" };

我的问题是如何在堆中分配内存?我的意思是将objectA.AList分配在objectA(image1)内或作为堆中的单独对象(image2)

IMAGE1:

enter image description here

图像2:

enter image description here

1 个答案:

答案 0 :(得分:2)

正确答案是:图3。

我不会画这个,但是你的例子会导致堆上有5个物体。

对象(实例)没有名称,但它们由以下引用引用:

  1. 对象A
  2. objectA.AList
  3. objectA.AList [0]
  4. objectA.AList [1]
  5. objectA.AList [2]
  6. 每个字符串也是一个对象。

    objectA实例仅包含对List的引用,List包含对字符串的引用数组。使用了3个,可能会分配更多,仍然是null

    这些物体都没有生活在另一个物体里面。