求解vs2010环境中release模式下死递归无终点有关问题
求解vs2010环境中release模式下死递归无终点问题
下述程序在debug模式下会因为栈满而退出,但是在release模式下一直运行,而且通过资源管理器观察,显示内存也没有占用多少。求大神解释啊。
#include <stdio.h>
int i;
void f()
{
char g[1024]="haha";
i++;
printf("%d\n",i);
f();
int k;
k = 1; //避免尾递归
}
int main()
{
f();
return 0;
}
------解决方案--------------------
release模式下,某些递归,会优化成跳转,这样实际上递归就变成循环了。
另外
不能避免优化尾递归,因为编译器,可以识别
这两句是无用代码,可能会执行废码优化,从而被从代码中剔除。
因而,不能避免优化尾递归
这样,debug 下会因为堆栈耗尽而出错退出的代码;
在release 下,就成为永远循环的死循环代码了。
下述程序在debug模式下会因为栈满而退出,但是在release模式下一直运行,而且通过资源管理器观察,显示内存也没有占用多少。求大神解释啊。
#include <stdio.h>
int i;
void f()
{
char g[1024]="haha";
i++;
printf("%d\n",i);
f();
int k;
k = 1; //避免尾递归
}
int main()
{
f();
return 0;
}
------解决方案--------------------
release模式下,某些递归,会优化成跳转,这样实际上递归就变成循环了。
另外
int k;
k = 1; //避免尾递归
不能避免优化尾递归,因为编译器,可以识别
这两句是无用代码,可能会执行废码优化,从而被从代码中剔除。
因而,不能避免优化尾递归
这样,debug 下会因为堆栈耗尽而出错退出的代码;
在release 下,就成为永远循环的死循环代码了。