【发布时间】:2011-09-25 18:22:41
【问题描述】:
在 C# 中,堆和栈是有区别的。我刚刚意识到我一直认为堆栈是 RAM,而堆是硬盘驱动器。但现在我不确定它是否正确。如果不是,那么将它们存储在一个地方有什么区别?
【问题讨论】:
标签: c# heap-memory stack-memory
在 C# 中,堆和栈是有区别的。我刚刚意识到我一直认为堆栈是 RAM,而堆是硬盘驱动器。但现在我不确定它是否正确。如果不是,那么将它们存储在一个地方有什么区别?
【问题讨论】:
标签: c# heap-memory stack-memory
“堆栈”(或更准确地说是调用堆栈)是自动托管的内存(即使在像 C 这样的“非托管语言”中):局部变量存储在堆栈中的堆栈帧中,其中还包含过程或函数参数和返回地址,可能还有一些需要在返回时恢复的特定于机器的状态。
堆内存是用于满足动态内存分配(C 中的malloc)的 RAM(或者更确切地说:虚拟地址空间)的一部分。
然而,在 C# 中,堆和堆栈的使用是一个实现细节。但实际上,引用类型的对象是堆分配的;值类型数据既可以存储在堆栈上,也可以存储在堆上,具体取决于上下文(例如,如果它是引用类型对象的一部分)。
【讨论】: