【发布时间】:2012-09-20 00:48:47
【问题描述】:
我对书中的问题 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 添加了偏移量,为什么还要进行“与”操作? [-1] 是什么意思?提前感谢您的帮助。
【问题讨论】:
-
这是书中的确切代码吗?它缺少对 malloc 的调用...