什么数据将存储在C#中的堆栈中

时间:2015-08-03 12:23:36

标签: c#-4.0

由于我理解所有类变量,例如实例成员,静态成员,常量s ......它们的引用将保存在堆中,这些变量的实际值将保存在堆栈中。

如果它只是值类型而不是任何引用类型引用它将仅像枚举那样存储在堆栈中,除了枚举哪些数据将存储在堆栈存储器中。

如果我的理解错误,请纠正我。

1 个答案:

答案 0 :(得分:1)

虽然引用类型总是在堆上分配,但值类型可以在堆栈上分配 - 但不一定。值类型仅在堆栈上分配时,它是未包装的非转义本地或临时变量,未包含在引用类型中且未在寄存器中分配。

堆栈中不会出现什么:

  • 作为类的一部分的值类型将最终在堆上。
  • 如果装箱,它将最终在堆上。
  • 如果是数组,它将最终在堆上。
  • 如果它是一个静态变量,它将最终在堆上。
  • 如果被一个闭包捕获,它将最终在堆上。
  • 如果在迭代器或异步块中使用,它将最终在堆上。
  • 如果由不安全或非托管代码创建,则可以在任何类型的数据结构中分配(不一定是堆栈或堆)。

枚举只会被分配"在堆栈中,当它们没有被分配为某个其他结构的一部分时,就像数组一样。