请问不同操作系统对于栈耗尽是如何处理的呢?
例如递归调用func(),在不同操作系统下,该线程栈耗尽后是如何处理的呢?
void func()
{
int a[10000];
a[10000 - 1] = 5;
func();
}
[解决办法]
程序当掉
[解决办法]
一般都是程序崩溃,操作系统强制结束程序。
[解决办法]
崩溃
[解决办法]
弹出错误
现代操作系统一般会预知这些情况,会防止崩溃的发生
[解决办法]
弹出错误
[解决办法]
没有疑问的是会报内存错误,并退出程序
[解决办法]
关注。
[解决办法]
试了下, 果然运行时崩溃了.
[解决办法]
弹出错误
[解决办法]
stack overflow 异常
[解决办法]
code dump
[解决办法]
当
[解决办法]
#include <iostream>
using namespace std;
void func() {
int a[10000];
a[10000-1] = 5;
cout < < "hello " < < endl;
func();
}
int main() {
func();
return 0;
}
以上是我写的源代码,在Windows的命令行下运行,只是输出了若干行的hello,没有报错,是不是系统自动kill进程了?怎么会什么反应都没有呢?
[解决办法]
在windows下会抛出一个stackoverflow异常,把代码改改,前面加上
#include <windows.h>
int main() {
__try
{func();}
__except(1)
{cout < < "overflow " < <endl;}
return 0;
}
具体可以看看SEH。