堆栈和堆在c#

时间:2011-06-30 07:41:19

标签: c# stack heap

  

可能重复:
  What and where are the stack and heap

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

1 个答案:

答案 0 :(得分:12)

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

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

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