C#中的ValueType数组会进入堆栈还是堆栈?

时间:2011-07-22 18:19:12

标签: c# stack heap

  

可能重复:
  (C#) Arrays, heap and stack and value types

我正在尝试研究c#

中内存分配之间的一些差异

我们假设我有这个指示:

int[] array = new int[512];

“阵列”是否会进入堆?或者它在Stack上保留512个整数?

2 个答案:

答案 0 :(得分:12)

数组本身是在堆上分配的内存。人们感到困惑,认为价值类型总是在堆栈上,这并不总是正确的。

例如,在这个类中:

public class X
{
    public int Y;
}

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

阵列类似。 int作为值类型包含在数组中,但是数组本身在堆上,因此int也是。

答案 1 :(得分:-7)

这并不重要,因为你既没有直接访问cpu堆栈也没有cpu堆,所以你无法控制它。如果你无法控制它,你不必担心它。

在StackOverflowException或MemoryAllocationError的情况下,你可以做很少的事情来恢复那种情况下的关键数据