环境:Windows 7 64位上的CodeBlocks
void recurse(int i)
{
int a = 9;
cout<<i<<endl;
recurse(++i);
}
int main()
{
recurse(1);
return 0;
}
当我在发布模式下运行上面的代码时,它很容易超过600k的递归调用,当在调试模式下它在43385次调用后失败。
知道为什么会这样吗?
这不是因为编译器优化了a=9
,没有那个语句我在调试模式下得到了65078个调用
答案 0 :(得分:1)
调试版本将执行堆栈溢出检查。为此,它需要为每个函数调用分配一些堆栈内存。
此外,参数也将在堆栈上传递,而版本构建可能会使用寄存器。