由于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; |