.预分配内存
预分配内存主要是针对需要循环处理数据的情况的。比如视频处理,每帧图像的处理都需要一定的缓存,如果每帧申请释放,则势必会降低算法效率,如下所示:
1 //处理一帧 2 void Process(BYTE *pimg) 3 { 4 malloc 5 ... 6 free 7 } 8 9 //循环处理一个视频 10 for(int i = 0; i < N; i++) 11 { 12 BYTE *pimg = readimage(); 13 Process(pimg); 14 }
1 //处理一帧 2 void Process(BYTE *pimg, BYTE *pBuffer) 3 { 4 ... 5 } 6 7 //循环处理一个视频 8 malloc pBuffer 9 for(int i = 0; i < N; i++) 10 { 11 BYTE *pimg = readimage(); 12 Process(pimg, pBuffer); 13 } 14 free
前一段代码在每帧处理都malloc和free,而后一段代码则是有上层传入缓存,这样内部就不需每次申请和释放了。当然上面只是一个简单说明,实际情况会比这复杂得多,但整体思想 是一致的。