本帖最后由 forthlab 于 2016-5-24 08:46 编辑
一个简单的程序,计算d = 1325.531 + 33459.003*T - 345.59*T*T - 67.890048*T*T*T;函数内有很多类似的计算,发现函数把内存都占用了;
单步执行后发现,表达式计算中会占用内存,计算完成后,并没有完全释放内存,还残留了部分内存没有释放;
结果很多类似公式,把内存都用完了;
测试程序如下
double T;
void fun1()
{
double d;
........
//代码1
//此时sp=503
d = 1325.531 + 33459.003*T - 345.59*T*T - 67.890048*T*T*T;
//此时sp=4c3,多占用了64byte堆栈
................}
//将表达式打散了,计算完成后,占用的内存都释放了;
void fun2()
{
double d;
................
//代码2
//此时sp=503
d = -67.890048
d *= T;
d += - 345.59;
d *= T;
d += 33459.003;
d *= T;
d += 1325.531;
//此时sp=503,没有多消耗堆栈
...........
}
我的疑问: 编译器用那个代码1 计算完成公式后,为何会多占用64byte堆栈区?
C编译器不就是负责管理类似的内存的么
|