我对书中的问题13.9有一个问题,“破解编码面试”。问题是编写一个支持分配内存的对齐的alloc和free函数,并且在答案中给出了代码如下:
void *aligned_malloc(size_t required_bytes, size_t alignment) {
void *p1;
void **p2;
int offset=alignment-1+sizeof(void*);
if((p1=(void*)malloc(required_bytes+offset))==NULL)
return NULL;
p2=(void**)(((size_t)(p1)+offset)&~(alignment-1)); //line 5
p2[-1]=p1; //line 6
return p2;
}
我对第 5 行和第 6 行感到很困惑。既然您已经将偏移量添加到 p1,为什么还要执行“and”?[-1] 是什么意思?我在这里先向您的帮助表示感谢。