根据我所知的C#(我相信我是对的),在堆栈上分配值类型,并在堆上分配引用类型。但是如果一个类中的一个字段是值类型,它是在堆上而不是在堆栈上分配的(我还是对,对吗?)。
话虽如此,我也知道每个C#程序都是一个类,由类组成。这应该意味着在C#程序,值类型或引用类型中声明的任何变量都应该在堆上分配。
然后,我可以推断出堆栈可能并不真正用于C#程序。我说'可能'因为可能会有特殊情况,但不是我知道的情况。
答案 0 :(得分:4)
你大多是正确的:)
然而,方法本地的变量确实是从堆栈中分配的。这是价值类型的全部真相。对于引用类型,实际对象,字符串,数组等在堆上分配,但指针本身在堆栈上分配。
答案 1 :(得分:1)
引用类型存储在堆中。对于引用类型中包含的值类型,情况也是如此。相反,在堆栈中存储了对存储在堆中的对象的引用。
关于500 - 内部服务器错误指出的方法的本地变量。它们被分配到堆栈。