【发布时间】:2012-06-22 10:50:07
【问题描述】:
堆栈总是向下增长而堆总是向上增长吗?
如果是这样,那么操作系统如何保护堆区域免受堆栈的干扰,反之亦然?
如果不是,那么影响它的因素有哪些?操作系统版本?编译器?还有什么吗??
【问题讨论】:
标签: operating-system
堆栈总是向下增长而堆总是向上增长吗?
如果是这样,那么操作系统如何保护堆区域免受堆栈的干扰,反之亦然?
如果不是,那么影响它的因素有哪些?操作系统版本?编译器?还有什么吗??
【问题讨论】:
标签: operating-system
是的,通常是这种情况。其实现细节由操作系统管理并且变化很大。举一个非常简单的例子,假设堆栈从内存中的较高地址开始,而堆则从较低地址开始。如果您跟踪堆的顶部和堆栈的顶部,并且将更多数据放在堆上,将更多数据放在堆栈上,它们最终会在两者之间的某个地方相遇,因为正如您所说,堆栈向下增长而堆向上增长。发生这种情况时,内存已用完,因此您只需要跟踪这两者何时发生冲突。
对于一个真正的操作系统,这通常不是那么简单,因为每个进程都有自己的堆栈,有些有自己的堆,我们可能正在处理实际物理位置可能在任何地方的虚拟内存地址。您可以假设每个堆和堆栈都有一个地址和一个限制,这些地址和限制构成了每个进程可以使用的最大内存量的边界。如果达到此限制,操作系统需要告诉进程它内存不足或尝试找到更多内存来分配给内存不足的进程。
【讨论】: