void* aligned_malloc(size_t size, size_t align)
{
void* raw_malloc_ptr; //初始分配的地址
void* aligned_ptr; //最终我们获得的alignment地址
if( align & (align - 1) ) //如果alignment不是2的n次方,返回
{
errno = EINVAL;
return ( (void*)0 );
}
if( 0 == size )
{
return ( (void*)0 );
}
//将alignment置为至少为2*sizeof(void*),一种优化做法。
if( align < 2*sizeof(void*) )
{
align = 2 * sizeof(void*);
}
raw_malloc_ptr = malloc(size + align);
if( !raw_malloc_ptr )
{
return ( (void*)0 );
}
//Align We have at least sizeof (void *) space below malloc'd ptr.
aligned_ptr = (void*) ( ((size_t)raw_malloc_ptr + align) & ~((size_t)align - 1));
( (void**)aligned_ptr )[-1] = raw_malloc_ptr;
return aligned_ptr;
}
void* aligned_free(void * aligned_ptr)
{
if( aligned_ptr )
{
free( ((void**)aligned_ptr)[-1] );
}
}
再给出一套对比一下,可能讲的

本文将详细讲解如何实现-aligned_malloc,通过引用《Hacker's Delight》这本书,揭示计算机运算的秘密,适合编译器开发者、库开发者和反工程爱好者。书中介绍了不为人知的二进制编码技巧和底层算法,内容深入且实用。
最低0.47元/天 解锁文章
2618

被折叠的 条评论
为什么被折叠?



