我正在尝试研究c#
中内存分配之间的一些差异我们假设我有这个指示:
int[] array = new int[512];
“阵列”是否会进入堆?或者它在Stack上保留512个整数?
答案 0 :(得分:12)
数组本身是在堆上分配的内存。人们感到困惑,认为价值类型总是在堆栈上,这并不总是正确的。
例如,在这个类中:
public class X
{
public int Y;
}
即使Y是一个int(值类型),由于它包含在一个类(引用类型)中,因此int Y将与对象本身一起存储,这很可能是在堆上。
阵列类似。 int作为值类型包含在数组中,但是数组本身在堆上,因此int也是。
答案 1 :(得分:-7)
这并不重要,因为你既没有直接访问cpu堆栈也没有cpu堆,所以你无法控制它。如果你无法控制它,你不必担心它。
在StackOverflowException或MemoryAllocationError的情况下,你可以做很少的事情来恢复那种情况下的关键数据