【发布时间】:2011-06-22 13:47:46
【问题描述】:
在许多操作系统上,堆栈和堆从进程的虚拟地址空间的相对两侧开始,并相互向对方增长。这允许堆栈在不撞到堆的情况下尽可能地扩展。
假设我有一个导致堆栈溢出的程序。我目前的理解是,这将导致堆栈不受控制地向堆增长并最终击中它。它是否正确?如果是,操作系统如何检测到发生堆栈溢出?似乎操作系统无法检测到程序正在尝试使用为堆分配的虚拟内存作为堆栈的一部分,因为它们位于连续的内存区域中。
我知道这是特定于操作系统的,但是了解任何操作系统中发生这种情况的机制肯定会有所帮助。这一直困扰着我一段时间,我似乎找不到任何好的解释。
【问题讨论】:
标签: language-agnostic operating-system stack-overflow