0

Does it always happen that stack always grows downwards & heap grows upwards?
If its so, then how does OS keeps the heap area protected from the interference of the stack & vice-versa?
If its not, then what factors affect it? OS version ? Compiler? Anything else??

4

1 回答 1

1

是的,这通常是这种情况。其实现细节由操作系统管理并且变化很大。举一个非常简单的例子,假设堆栈从内存中的较高地址开始,而堆则从较低地址开始。如果您跟踪堆的顶部和堆栈的顶部,并且将更多数据放在堆上并将更多数据放在堆栈上,它们最终会在两者之间的某个地方相遇,因为正如您所说,堆栈向下增长而堆向上增长。发生这种情况时,内存已用完,因此您只需要跟踪这两者何时发生冲突。

现在对于一个真正的操作系统,这通常不是那么简单,因为每个进程都有自己的堆栈,有些有自己的堆,我们可能正在处理实际物理位置可能在任何地方的虚拟内存地址。您可以假设每个堆和堆栈都被赋予了一个地址和一个限制,这些地址和限制构成了每个进程可以使用的最大内存量的边界。如果达到这个限制,操作系统需要告诉进程它内存不足或尝试找到更多内存来分配给内存不足的进程。

于 2012-06-26T13:28:53.367 回答