C#在结构上做了新的总是在堆栈上分配?

时间:2012-11-19 13:16:07

标签: c# garbage-collection

只是想知道如果我使用new分配结构,我是否不必关心垃圾收集。

如果它们稍后被转换为对象会怎么样?

public object Func()
{
  SMyStruct bla = new SMyStruct();

  return bla;
}

1 个答案:

答案 0 :(得分:1)

它将被“装箱”并将在Heap上分配。

Richter CLR通过C#:

可以使用名为boxing的机制将值类型转换为引用类型。在内部,这是当一个valuetype实例被装箱时的内容:

  1. 内存是从托管堆分配的。分配的内存量是值类型字段所需的大小加上托管堆上所有对象所需的两个额外开销成员(类型对象指针和同步块索引)。

  2. 将值类型的字段复制到新分配的堆内存中。

  3. 返回对象的地址。该地址现在是对象的引用;值类型现在是引用类型。