我现在正在阅读计算机视觉开源库OPENCV的源代码。我对这个函数感到困惑:
#define CV_MALLOC_ALIGN 16
void* fastMalloc( size_t size )
{
uchar* udata = (uchar*)malloc(size + sizeof(void*) + CV_MALLOC_ALIGN);
if(!udata)
return OutOfMemoryError(size);
uchar** adata = alignPtr((uchar**)udata + 1, CV_MALLOC_ALIGN);
adata[-1] = udata;
return adata;
}
/*!
Aligns pointer by the certain number of bytes
This small inline function aligns the pointer by the certian number of bytes by
shifting it forward by 0 or a positive offset.
*/
template<typename _Tp> static inline _Tp* alignPtr(_Tp* ptr, int n=(int)sizeof(_Tp))
{
return (_Tp*)(((size_t)ptr + n-1) & -n);
}
fastMalloc
用于为指针分配内存,它会调用 malloc
函数,然后调用 alignPtr
。我不太理解为什么在分配内存后要调用 alignPtr
。我的基本理解是通过这样做,机器可以更快地找到指针。在互联网上是否可以找到一些关于这个问题的参考资料?对于现代计算机来说,执行这个操作仍然必要吗?任何想法都将不胜感激。