C#中的值类型数组存储在堆栈还是堆中?

11

可能重复:
(C#)数组、堆和栈以及值类型

我正在尝试研究C#中内存分配的一些差异。

假设我有以下指令:

int[] array = new int[512];

"array"是放在堆(heap)上吗?还是在栈(stack)上预留512个整数的空间?


1
此外,http://blogs.msdn.com/b/ericlippert/archive/2009/05/04/the-stack-is-an-implementation-detail-part-two.aspx 应该成为每个考虑内存管理语言中堆栈的人必修课。 - user395760
Eric的博客文章存档副本 - David Peters
1个回答

21

数组本身是在堆上分配内存的。有些人会混淆并认为值类型总是在栈上,但这并不总是正确的。

例如,在这个类中:

public class X
{
    public int Y;
}

即使Y是一个值类型的int,但由于它包含在引用类型的类中,int Y将与对象本身一起存储,而对象本身很可能在堆上。

数组也是类似的。这些int作为值类型包含在数组中,但数组本身位于堆上,因此int也是如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接