【发布时间】:2015-08-30 05:34:34
【问题描述】:
我刚刚通过this Wikipedia entry。出于好奇找到分配给一个简单进程的堆栈大小,我尝试了这个
int main()
{
static int count = 0;
cout<<" Count = "<<count++<<endl;
main();
return 0;
}
到目前为止,一切都很好,可以理解,顺便说一下,从最后一位数字,即 43385,我可以猜测最大堆栈大小 - 在 32 位机器上(如果我说 4 个字节(每次调用的堆栈返回地址为 4 个字节) ),我可能听起来很傻。
现在,如果我将程序修改为:-
void foo()
{
static int count = 0;
cout<<" Count = "<<count++<<endl;
foo();
}
int main()
{
foo();
return 0;
}
在此我得到堆栈溢出计数:- 130156(好的,很好)
但我的问题是,如果我在 main 和 foo 之间添加一个函数,我得到这个计数递减 1(130155),如果 b/w foo 和 main 计数中的 2 个函数递减 2(130154)等等.为什么会出现这种行为?是不是因为每个函数地址都消耗了1个空间。
【问题讨论】:
-
永远不要打电话给
main()。 -
我只是在做实验?顺便说一句,有什么具体原因吗?
-
这是未定义的行为,被标准禁止。
-
贴出的代码与运行的代码不匹配。
标签: c++ operating-system stack-overflow