理解C malloc和sbrk()

Fre*_*cer 1 c malloc pointers

我试图理解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;
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

rob*_*off 9

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

malloc使用sbrk,但更灵活.一般来说,malloc会要求sbrk大块的内存,然后分发那些大块的内容.因此大多数呼叫malloc不会导致呼叫sbrk.