处理虚拟内存 - 堆栈和堆之间的空间

时间:2012-03-05 04:49:21

标签: process stack heap virtual-memory

当进程虚拟内存中堆栈和堆之间未使用的内存空间耗尽时会发生什么?

1 个答案:

答案 0 :(得分:1)

在Windows中,堆栈和堆之间有一个保护页面,因此堆和堆栈永远不会接触。这是出于安全原因(因此堆栈耗尽错误不会导致更容易被利用的堆溢出错误。)

如果您在询问堆变满时会发生什么,简单的答案是您的malloc(或HeapAlloc或其他)调用将开始返回NULL。如果你问的是当堆栈变满时会发生什么,那么你会得到一个堆栈耗尽异常(有时被错误地称为堆栈溢出)。在任何一种情况下,这通常会导致程序释放一些内存并继续或退出桌面。