在循环内使用malloc,不同的情况,速度相差10倍!
代码的情况是这样:
- C/C++ code
...RedrawList* redrawListTmp;startTime = GETTIME(); redrawListTmp = malloc(sizeof(RedrawList));timeCost_updateRedrawList += ((unsigned long)GETTIME()-startTime); //打开下面这一行注释后,速度快10倍,和上面一行是一样的 //redrawListTmp = malloc(sizeof(RedrawList));...
上面的代码是一个循环内的,会执行1999次,就这样运行,得到的数据是(时间单位是CPU时钟周期):
程序渲染一帧需要的总时间:500168504
timeCost_updateRedrawList获取的malloc的累计时间: 227616936
把注释打开后,
总时间:50916024
timeCost_updateRedrawList获取的malloc的累计时间:3929872
可以看到,不论是总的渲染时间还是timeCost_updateRedrawList的值,都有很大的提升,图像渲染也明显快很多。
IDE环境是VC6,使用C,DEBUG模式,单线程。
不知道为什么多malloc一次,速度反而快这么多,大家帮忙分析一下,谢谢!
[解决办法]
应该用内存池,速度提高很多,而且碎片也少
[解决办法]
debug 不纠结效率
要优化到 release 下优化
[解决办法]
这种奇怪的问题我以前也遇到过类似的。有时候额外分配一些内存确实会加快malloc的整体速度。因为不想去看Malloc和free的代码,估计看了也很难搞懂。所以只是猜测malloc里面的分配机制其实是有很多种的,它内部完全可能像内存池一样预留一部分空间。而什么时候预留肯定有一些临界值。
所以像你加了一个多余的malloc或者移去free,可能就影响到了它的分配机制。我感觉malloc每次分配内存的步骤其实是不一样的,可能是malloc内部有好几种不同的分配机制,根据我们对内存的使用自动进行相应的调整。但这个估计就完全平台相关,实现相关了。