有个函数里面有以下一段语句:
im = new float【100】【100】;
.。。。
。。。
delete [ ]im;
然后程序跑第一次这个函数,(delete [ ]im; ) 这个语句耗时是300多,第二次跑变600多,随着调用次数增加,耗时不断增加
请问这是什么原因,应该怎么写才能使 内存释放耗时稳定?
(除了统一在全局那里申请内存的方式,我现在就想在函数里面这么弄,请问有什么解决方法吗?很好奇这个到底是什么原因)
King Wang1:
有好几种原因会导致每次函数耗时差别,这里举几个例子:
1)cache的情况,包括数据cache和代码cache。比如函数代码在不在cache中会导致代码读入的时间不同,如果在cache中,那么每次耗时1cycle,否则就根据代码所在位置决定耗时,可以使10cycle(L2),也可以是100cycle(DDR);
2)带OS的中断情况,如果有OS运行那么任务可能被中断打断,这就无法保证任务中某个函数的时间消耗。
所以LZ你的问题,如果你在任务中的,你可以在进入之前关中断,执行函数后开中断,那么你重复malloc和free测试你会发现基本每次free都是相似的结果。