可能重复:
(C#)数组、堆和栈以及值类型
我正在尝试研究C#中内存分配的一些差异。
假设我有以下指令:
int[] array = new int[512];
"array"是放在堆(heap)上吗?还是在栈(stack)上预留512个整数的空间?
可能重复:
(C#)数组、堆和栈以及值类型
我正在尝试研究C#中内存分配的一些差异。
假设我有以下指令:
int[] array = new int[512];
"array"是放在堆(heap)上吗?还是在栈(stack)上预留512个整数的空间?
数组本身是在堆上分配内存的。有些人会混淆并认为值类型总是在栈上,但这并不总是正确的。
例如,在这个类中:
public class X
{
public int Y;
}
即使Y是一个值类型的int,但由于它包含在引用类型的类中,int Y将与对象本身一起存储,而对象本身很可能在堆上。
数组也是类似的。这些int作为值类型包含在数组中,但数组本身位于堆上,因此int也是如此。