13

可能重复:
堆栈和堆是什么以及在哪里

在 C# 中,堆和栈是有区别的。我刚刚意识到我一直认为堆栈是 RAM,而堆是硬盘驱动器。但现在我不确定它是否正确。如果不是,那么将它们存储在一个地方有什么区别?

4

1 回答 1

13

“堆栈”(或更准确地说是调用堆栈)是自动托管的内存(即使在像 C 这样的“非托管语言”中也是如此):局部变量存储在堆栈中的堆栈帧中,其中还包含过程或函数参数以及返回地址和也许某些特定于机器的状态需要在返回时恢复。

堆内存是用于满足动态内存分配(malloc在 C 中)的 RAM(或者更确切地说:虚拟地址空间)的一部分。

然而,在 C# 中,堆和堆栈的使用是一个实现细节。但实际上,引用类型的对象是堆分配的。值类型数据既可以存储在堆栈上,也可以存储在堆上,具体取决于上下文(例如,如果它是引用类型对象的一部分)。

于 2011-06-30T07:59:32.550 回答