对象驻留在c#中的哪个位置?

Gur*_*lki 4 c# java

我是一名java程序员,我知道java对象存储在堆上.只是为了好奇,想知道对象在c#中的位置.

Tho*_*que 7

  • 对于引用类型:在堆上
  • 对于值类型:在堆栈上用于局部变量和方法参数,或在堆上用于引用类型的成员

  • 有一些边缘案例; 迭代器块中的局部变量或捕获的变量实际存储在堆上.同样,堆上的*本身*(直接在间接上)的结构的成员也在堆上.当然,盒装值也在堆上. (2认同)

Meh*_*ari 5

C#语言未指定应存储对象或值的位置.它只是定义了引用类型和值类型的语义.

Microsoft .NET CLR存储堆栈上的局部变量包含的值(值类型的实例)以及堆上的引用类型(对象)和非本地值类型的实例.但是,如前所述,C#语言的其他实现可以按照自己的意愿自由存储,只要它们符合C#语言规范定义的值和引用语义即可.