2

引用 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;

这可能有一个非常明显的答案,如果我错过了,非常抱歉!

4

1 回答 1

2

根据this page,我不能说的权威性:

未指定 sbrk() 返回的指针是否适合任何目的对齐。

所以基本上,是的,你很可能会发现存在对齐问题。

于 2017-02-09T02:31:38.883 回答