是在堆栈还是堆上创建Integer?

时间:2013-06-25 09:27:03

标签: c# .net

我知道像int这样的所有原始类型都是值类型,并且是在堆栈上创建的,其中字符串,对象数组等是引用类型并在堆上创建。

我怀疑如下。 如果我创建一个像整数的对象 int i = new int(); 那么既然它是一个对象,它会在堆栈还是堆上创建?

4 个答案:

答案 0 :(得分:4)

简短回答:实施细节。

长答案:实施细节 - 完全实施。

它可以在任何一个上创建..取决于它的创建方式。它是班级成员吗?它是局部变量吗? ..

答案 1 :(得分:4)

Eric Lippert说你不应该真的关心它。阅读here

Int是一种值类型,它几乎总是在堆栈中创建。

当整数是您实例化的类中的变量时,它不会在堆栈中创建:在这种情况下,实例位于堆及其所有成员中,包括值类型。

我上面提供的链接比我更好地解释了它,当然

答案 2 :(得分:3)

It can be created on the stack, heap or stored in a register

  

过去的方式我通常会推翻这个神话,就是说真正的陈述应该是“在桌面CLR上的C#的Microsoft实现中,当值为a时,值类型存储在堆栈中局部变量或临时不是lambda或匿名方法的封闭局部变量,方法体不是迭代器块,抖动选择不注册该值。“

答案 3 :(得分:2)

int i = new int();相当于int i = 0;,所以不,它对堆栈/堆分配没有任何影响。

请注意,并非总是在堆栈上创建值类型,请参阅此精细博客条目以进行详细讨论: