面试官:
堆溢出和栈溢出一般是由什么原因导致的?
应聘者回答参考:
1. 堆溢出(Heap Overflow)
- 原因:
- 程序中不断
new
或malloc
分配对象,但没有释放,导致堆内存被耗尽。 - 例如:循环中反复申请对象,却没有对应的
delete/free
。
- 程序中不断
- 表现:
- 程序内存占用不断上升。
- 最终触发 Out Of Memory (OOM),程序崩溃。
2. 栈溢出(Stack Overflow)
- 原因:
- 死循环中的递归调用 → 函数反复入栈,栈空间被耗尽。
- 递归层次过深 → 例如计算斐波那契时递归没有优化,导致栈深度超过系统限制。
- 局部变量过大 → 在栈上分配过大的数组或结构体,超过栈的容量限制。
- 表现:
- 程序突然崩溃,并报错 “stack overflow” 或 “segmentation fault”。
总结:
- 堆溢出:主要因为 无限制分配堆内存,最终耗尽内存。
- 栈溢出:主要因为 递归过深、死循环调用或局部变量过大,超过栈大小限制。
😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。