如何保护堆区域免受堆栈和干扰的干扰。反之亦然?

时间:2012-06-22 10:50:08

标签: operating-system

总是会发生堆栈总是向下增长的情况。堆积增长?
如果是这样,那么OS如何保护堆区域免受堆栈和干扰的干扰。反之亦然?
如果不是,那么影响它的因素是什么? OS版本?编译器?还有别的吗?

1 个答案:

答案 0 :(得分:1)

是的,通常就是这种情况。其实现细节由操作系统管理,并且差异很大。举一个非常简单的例子,假设堆栈从内存中较高的地址开始,而不是从较低地址开始的堆。如果你跟踪堆的顶部和堆栈的顶部,你在堆上放了更多的数据,堆栈上有更多的数据,它们最终会在中间的某个地方相遇,因为正如你所说堆栈向下增长而堆向上。当发生这种情况时,内存就会消失,所以你需要跟踪的是这两个内存发生碰撞的时间。

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