【发布时间】:2019-05-09 09:27:05
【问题描述】:
这段代码只是概念,没有任何意义。
void recur(int num)
{
static float tmp = num * num;
if (num == 0)
{
return;
}
else
{
recur(num - 1);
}
}
int main()
{
recur(1000000);
}
我认为静态变量只使用内存中的一个位置,但是在 main 中对 recur 函数的调用导致堆栈溢出失败这确实有意义变量 tmp 是否在堆栈中声明,但它不是静态的堆栈,对吧?
tmp 变量的行为是什么??
谢谢
【问题讨论】:
-
局部变量并不是堆栈中唯一的东西。每次调用也会产生开销(大多数情况下,可能会有例外)。
-
@Frank “也有每次调用的开销”加上一个局部变量 -
num -
您是否尝试过启用优化?
-
试试如果你删除静态变量会发生什么(可能会增加调用次数)
标签: c++ recursion static stack