C++程序的最大堆栈级别是多少?

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

这是不是只在未经授权的方式访问内存时打印的消息?

Tho*_*ews 5

可用于递归的内存量取决于编译器设置,操作系统和物理平台.没有最低限度或最高限额.

当内存不足时,可以打印各种错误,一条常见消息是"分段错误".

另外为什么打印分段错误?

这是不是只在未经授权的方式访问内存时打印的消息?

您的程序通过要求比可用内存更多的内存或访问程序范围(分配)之外的内存以未经授权的方式访问内存,因此操作系统很好并且显示了分段错误.您的操作系统可能已经破坏了您的计算机或挂起或重新启动.一些平台显示蓝屏死机.