理解C malloc和sbrk()

时间:2011-12-13 05:45:45

标签: c pointers malloc

我试图了解C语言中malloc和sbrk之间的区别以及它们之间的关系。据我所知,malloc和sbrk几乎是一回事,但我读到malloc在分配内存时使用了sbrk。如果有人向我解释,这真的令人困惑吗?

例如在这个程序中malloc调用sbrk吗?如果是这样的话,它每次调用时都会调用sbrk,所以对于这个例子10次?

int main(int argc, char **argv) {
        int i;
        void *start_pos, *finish_pos;
        void *res[10];
        start_pos = sbrk(0);
        for (i = 0; i < 10; i++) {
                res[i] = malloc(10);
        }
        finish_pos = sbrk(0);
        return 0;
}

谢谢,

2 个答案:

答案 0 :(得分:9)

sbrk从操作系统请求更多内存。这是一个非常低级的功能,并不是很灵活。

malloc使用sbrk,但更灵活。通常,malloc会向sbrk询问大块内存,然后分发这些大块的内容。因此,对malloc的大多数来电 都会导致对sbrk的调用。

答案 1 :(得分:3)

malloc使用sbrk - 用于更改数据段的系统调用 K&amp; R C有一个附录,它使用malloc sys调用来完成freesbrk的实现。