1. 设计内存分配和释放两个函数:要求仅适用malloc实现任意字节对齐的内存分配和释放,函数原型如下:
void *aligned_malloc( unsigned int size, unsigned int align );
void aligned_free( void *ptr );
void * aligned_malloc(unsigned int size, unsigned int align)
{
//预先分配一块够用的内存,但是内存开始地址不一定是align的倍数
void* ptr = malloc(size + align);
if (ptr)
{
//把内存使用部分的开始地址设为align的倍数,实现对齐功能
void* aligned = (void*)(((long)ptr + align) & (~(align - 1)));
//为了释放完整释放分配的内存,保留完整内存的开始地址
((void**)aligned)[-1] = ptr;
return aligned;
}
return(NULL);
}
void aligned_free(void* ptr)
{
free(((void**)ptr)[-1]);
}