Process UNIX进程是否会导致其堆和堆栈相互重叠?

Process UNIX进程是否会导致其堆和堆栈相互重叠?,process,heap-memory,stack-memory,Process,Heap Memory,Stack Memory,这种“超限”情况会发生吗?或者,系统保证堆栈和堆是进程虚拟地址空间中两个完全隔离的区域,因此在堆栈中执行的访问/操作永远不会影响堆,反之亦然 我想了解的一个特定场景是,进程是否可能以导致系统不再正确管理堆栈或堆的方式损坏其内存 我发现了一个有用的链接:我想在这之前,程序会在std::bad_alloc类型错误(堆)或堆栈溢出类型错误(堆栈)上终止。堆和堆栈是分开存在的,我能看到它们相交的唯一方法是在我上面提到的两种情况中的一种,这两种情况都会导致负责的程序崩溃。Dadude999,谢谢您的评论。

这种“超限”情况会发生吗?或者,系统保证堆栈和堆是进程虚拟地址空间中两个完全隔离的区域,因此在堆栈中执行的访问/操作永远不会影响堆,反之亦然

我想了解的一个特定场景是,进程是否可能以导致系统不再正确管理堆栈或堆的方式损坏其内存


我发现了一个有用的链接:

我想在这之前,程序会在
std::bad_alloc
类型错误(堆)或堆栈溢出类型错误(堆栈)上终止。堆和堆栈是分开存在的,我能看到它们相交的唯一方法是在我上面提到的两种情况中的一种,这两种情况都会导致负责的程序崩溃。

Dadude999,谢谢您的评论。我理解上述错误会导致流程失败。我在我的帖子中添加了一个特定的场景。据我所知,UNIX允许您设置单个进程可以使用的内存量,因此不应该有任何溢出到不属于该特定进程的内存中。因此,我不相信任何形式的腐败都可能发生在单个流程所做的任何事情上。另一方面,如果进程使用
fork()
来创建新进程,那么它现在可能会消耗更多内存(请参阅)。这也可以通过限制系统中单个用户可能使用的虚拟内存来防止。当然,您可以获得,但这不会导致系统失去修改该内存的能力。正如我所提到的,通常这些情况会导致程序简单地获得一个
SIGSEGV
并退出。我感兴趣的范围是在同一个过程中,而不考虑它对其他过程的影响;不过,感谢您的扩展。因此,听起来内存损坏只会影响进程本身的行为/正确性;系统管理进程堆和堆栈的能力受到安全保护,就好像这种能力是在内核上下文中完成的一样。