引用了Kernighan和Ritchie的代码(第2版第188页(,
static Header* morecore(unsigned nu) {
char *cp, *sbrk(int);
Header* up;
if (nu < NALLOC)
nu = NALLOC;
cp = sbrk(nu * sizeof(Header));
if (cp == (char*) -1) /* No space at all */
return NULL;
up = (Header*) cp;
up->s.size = nu;
free((void*)(up+1));
return freep;
}
这里的问题是,当 sbrk
返回的值类似于 101 时会发生什么,当在行中完成对up
的指针分配时,对齐将无效up = (Header*)cp;
这可能有一个非常明显的答案,如果我错过了,很抱歉!
根据此页面,我不能说其权威性:
未指定 sbrk(( 返回的指针是否出于任何目的正确对齐。
所以基本上,是的,你可能会发现存在对齐问题。