1

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

如果它们后来被投射到一个物体上怎么办?

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

  return bla;
}
4

1 回答 1

1

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

通过 C# 实现的 Richter CLR:

可以使用称为装箱的机制将值类型转换为引用类型。在内部,当 valuetype 的实例被装箱时,会发生以下情况:

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

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

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

于 2012-11-19T13:18:03.030 回答