我很想知道当堆栈和堆冲突时会发生什么。如果有人遇到过这种情况,请他们可以说明情况。
最佳答案
在运行于现代OS上的现代语言中,当您尝试增加堆时,将会出现堆栈溢出(欢呼!),或者malloc()
或sbrk()
或mmap()
将失败。但是并非所有软件都是最新的,因此让我们看一下故障模式:
malloc()
的实现几乎肯定会注意到失败并返回NULL
。这取决于您。 我总是对编译器作者愿意为操作系统放置保护页面以防止堆栈溢出而感到惊讶。当然,在您开始拥有成千上万的线程(每个线程都有自己的堆栈)之前,此技巧非常有效。
关于c++ - 堆和堆碰撞时会发生什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1334055/