【问题标题】:How is memory allocated when you create a property of class?创建类的属性时如何分配内存?
【发布时间】:2016-09-14 13:44:42
【问题描述】:

我有以下课程:

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)

图片1:

图片2:

【问题讨论】:

  • 请考虑您对new List&lt;string&gt; 的调用可能在任何时间点 - 它可能在另一个函数中,并且可以在您调用new A() 之前或之后调用,并存储在任意数量的中间变量。您如何期望运行时预测未来并知道它将最终分配给特定的A 对象的AList 属性?
  • @Damien_The_Unbeliever 因此答案是Image2?

标签: c# memory-management garbage-collection


【解决方案1】:

正确答案是:图 3。

我不会画这个,但你的例子导致堆上有 5 个对象。

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

  1. 对象A
  2. objectA.AList
  3. objectA.AList[0]
  4. objectA.AList[1]
  5. objectA.AList[2]

每个字符串本身也是一个对象。

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

这些对象都不存在于另一个对象的“内部”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 2023-03-18
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多