由于cvAlloc实际上是使用C库函数中的malloc进行内存分配,要调用windows的堆内存分配函数,所以分配的内存速度慢!特别是大量细小内存块的分配和释放(如大量的特征点),要消耗大量时间,为了提高速度,有两个解决方案:
1. 使用OPENCV专门的内存管理程序Memory Storage
2. 使用堆栈进行小内存分配。CvStackAlloc实际上调用的是alloca函数。该函数的特点是,不能用free来释放申请的内存,当它所在函数返回时,申请的内存会自动释放。
例如:
if( buf_size <= CV_MAX_LOCAL_SIZE )
{
col_buf = (dsttype*)cvStackAlloc( buf_size );
local_alloc = 1;
}
else
{
col_buf = (dsttype*)cvAlloc( buf_size );
if( !col_buf )
return 0;
}
if( col_buf && !local_alloc )
cvFree( &col_buf );
return 1;
|