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

C# 4.0 什么数据将存储在C中的堆栈中#,c#-4.0,C# 4.0,据我所知,所有类变量都像实例成员、静态成员、常量s。。。它们的引用将保存在堆中,这些变量的实际值将保存在堆栈中 如果它是唯一的值类型,不被任何引用类型引用,则它将仅像enum一样存储在堆栈中,除了enum之外,哪些数据将存储在堆栈内存中 如果我的理解错误,请纠正我。虽然引用类型总是在堆上分配,但值类型可能在堆栈上分配,但不一定。只有当值类型是未包含在引用类型中且未在寄存器中分配的未装箱非转义局部或临时变量时,才会在堆栈上分配该值类型 哪些内容不会在堆栈中出现: 作为类的一部分的值类型将在堆中结

据我所知,所有类变量都像实例成员、静态成员、常量s。。。它们的引用将保存在堆中,这些变量的实际值将保存在堆栈中

如果它是唯一的值类型,不被任何引用类型引用,则它将仅像enum一样存储在堆栈中,除了enum之外,哪些数据将存储在堆栈内存中


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

虽然引用类型总是在堆上分配,但值类型可能在堆栈上分配,但不一定。只有当值类型是未包含在引用类型中且未在寄存器中分配的未装箱非转义局部或临时变量时,才会在堆栈上分配该值类型

哪些内容不会在堆栈中出现:

  • 作为类的一部分的值类型将在堆中结束
  • 如果装箱,它最终将被放在堆上
  • 如果是一个数组,它将在堆上结束
  • 如果它是一个静态变量,那么它将在堆中结束
  • 如果被一个闭包捕获,它将在堆上结束
  • 如果在迭代器或异步块中使用,它将在堆中结束
  • 如果由不安全或非托管代码创建,则可以在任何类型的数据结构(不一定是堆栈或堆)中进行分配
枚举只有在没有作为其他结构(如数组)的一部分进行分配时才会在堆栈中“分配”