读书人

在循环内应用malloc不同的情况速度

发布时间: 2012-07-05 07:59:17 作者: rapoo

在循环内使用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内部有好几种不同的分配机制,根据我们对内存的使用自动进行相应的调整。但这个估计就完全平台相关,实现相关了。

读书人网 >C语言

热点推荐