use*_*072 4 c++ stack-overflow recursion
我试着看看在通过C++中的递归获得堆栈溢出之前我能走多远.我写了这个函数
long recurse( long level ) {
std::cout << level << std::endl;
return recurse( ++level ) * 12 //to avoid tail recursion optimization, if present
}
Run Code Online (Sandbox Code Playgroud)
我称之为传递0作为第一个值.它打印的最后一个数字是349411,然后打印Segmentation fault并停止运行.我的猜测是内存不足,但是stack overflow在Lua中抛出错误之前,使用相同值调用的相同函数打印499982 ,如果Lua函数的内存权重比C++函数小,我会感到惊讶.
那么C++程序在停止执行之前可以获得的最大堆栈级别是多少?
是真的"直到它有记忆",还是有固定的限制?
还为什么打印Segmentation fault?
这是不是只在未经授权的方式访问内存时打印的消息?
可用于递归的内存量取决于编译器设置,操作系统和物理平台.没有最低限度或最高限额.
当内存不足时,可以打印各种错误,一条常见消息是"分段错误".
另外为什么打印分段错误?
这是不是只在未经授权的方式访问内存时打印的消息?
您的程序通过要求比可用内存更多的内存或访问程序范围(分配)之外的内存以未经授权的方式访问内存,因此操作系统很好并且显示了分段错误.您的操作系统可能已经破坏了您的计算机或挂起或重新启动.一些平台显示蓝屏死机.