我试图了解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;
}
谢谢,
答案 0 :(得分:9)
sbrk
从操作系统请求更多内存。这是一个非常低级的功能,并不是很灵活。
malloc
使用sbrk
,但更灵活。通常,malloc
会向sbrk
询问大块内存,然后分发这些大块的内容。因此,对malloc
的大多数来电 都会导致对sbrk
的调用。
答案 1 :(得分:3)
malloc
使用sbrk
- 用于更改数据段的系统调用
K&amp; R C有一个附录,它使用malloc
sys调用来完成free
,sbrk
的实现。