在许多操作系统中,堆栈和堆从进程的虚拟地址空间的相反侧开始,并朝向彼此增长。这使得堆栈可以尽可能地扩展而不会碰到堆。
假设我有一个导致堆栈溢出的程序。我的理解是,这将导致堆栈无法控制地向堆增长,并最终撞到它。这个理解正确吗?如果是的话,操作系统如何检测到堆栈溢出发生?似乎操作系统无法检测到程序试图使用为堆分配的虚拟内存作为堆栈的一部分,因为它们将在连续的内存区域中。
我知道这是特定于操作系统的,但对于任何操作系统中发生这种情况的机制的见解肯定会很有帮助。这已经困扰我一段时间了,我似乎找不到任何好的解释。
假设我有一个导致堆栈溢出的程序。我的理解是,这将导致堆栈无法控制地向堆增长,并最终撞到它。这个理解正确吗?如果是的话,操作系统如何检测到堆栈溢出发生?似乎操作系统无法检测到程序试图使用为堆分配的虚拟内存作为堆栈的一部分,因为它们将在连续的内存区域中。
我知道这是特定于操作系统的,但对于任何操作系统中发生这种情况的机制的见解肯定会很有帮助。这已经困扰我一段时间了,我似乎找不到任何好的解释。