如何自定义malloc函数,返回32字节对齐的内存地址?


如题。期望自定义一个内存分配函数,原型如下:

void * my_malloc(size_t size, int aligned );

传入期望申请的内存大小、期望的字节对齐值,返回申请到的指定的字节对齐的内存首地址

c C++

bfans 12 years, 8 months ago

作为一个完整的解决方案来说,可以多申请4个字节。其中3个用来调整对齐,一个用来记录和实际分配的起始地址的偏差值。这样对应的free可以检查这个偏差值,然后恢复到最开始申请的内存起始地址

   
  void *_aligned_malloc(size_t size)
  
{
void *tempPtr = malloc(size + 4);
char offset = 4 - ((int)tempPtr % 4);
char *alignedPtr = (char*)tempPtr + offset;
alignedPtr[-1] = offset;
return (void*)alignedPtr;
}

void _aligned_free(void *ptr)
{
char offset = ((char*)ptr)[-1];
free((char*)ptr - offset);
}

弛哥Chico answered 12 years, 8 months ago

Your Answer