【发布时间】:2011-07-17 18:22:17
【问题描述】:
我最近想到了这种堆栈溢出的情况:
int f()
{
return f();
}
int main(void)
{
f();
return 0;
}
这肯定会使程序崩溃。但我的问题是为什么这与无限循环不同?在返回行递归调用的情况下,编译器可以意识到不需要保留调用函数的任何信息,因为被调用函数的返回点与调用者的返回点相同。 现在,在这种情况下,我同意编译器需要将调用函数的信息保存在堆栈中:
int f()
{
int x = f();
return x;
}
int main(void)
{
f();
return 0;
}
我确实遗漏了一些东西,如果有人向我解释一下,我将不胜感激。问候
【问题讨论】:
标签: c recursion stack-overflow