堆栈是否应该在C#程序中真正分配?

时间:2015-07-28 12:11:29

标签: c# stack heap allocation

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

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

然后,我可以推断出堆栈可能并不真正用于C#程序。我说'可能'因为可能会有特殊情况,但不是我知道的情况。

2 个答案:

答案 0 :(得分:4)

你大多是正确的:)

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

答案 1 :(得分:1)

引用类型存储在堆中。对于引用类型中包含的值类型,情况也是如此。相反,在堆栈中存储了对存储在堆中的对象的引用。

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