堆栈真的应该在 C# 程序中分配吗?

Should the stack be really allocated in a C# program?

据我对 C# 的了解(我相信我是对的),值类型分配在堆栈上,引用类型分配在堆上。但是如果class中的一个字段是值类型,它是分配在堆上而不是在堆栈上(我还是对的,对吧?)。

话虽如此,我也知道每个 C# 程序都是一个 class,由 class 组成。这应该意味着在 C# 程序中声明的任何变量,值类型或引用类型,都应该分配在堆上。

那么,我可以推断的是,在 C# 程序中可能不会真正使用堆栈。我说 'may' 是因为可能会有特殊情况,但我不知道。

你基本上是对的:)

但是,方法的局部变量确实是从堆栈中分配的。这就是值类型的全部真相。对于引用类型,实际的对象、字符串、数组等,是在堆上分配的,而指针本身是在栈上分配的。

堆中存储了一个引用类型。这对于包含在引用类型中的值类型是正确的。相反,在堆栈中存储的是对存储在堆中的对象的引用。

关于 500 - 内部服务器错误指出的方法的局部变量。它们被分配到堆栈。