为什么我的堆栈大小会有所不同,具体取决于构建是Release还是Debug?

时间:2015-02-27 18:35:51

标签: c++

环境: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个调用

1 个答案:

答案 0 :(得分:1)

调试版本将执行堆栈溢出检查。为此,它需要为每个函数调用分配一些堆栈内存。

此外,参数也将在堆栈上传递,而版本构建可能会使用寄存器。