我正在尝试理解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;
}谢谢,
发布于 2011-12-13 13:48:46
sbrk从操作系统请求更多的内存。它是一个相当低级的函数,而且灵活性不高。
malloc使用sbrk,但更灵活。通常,malloc会向sbrk请求较大的内存块,然后分发这些较大的内存块。因此,大多数对malloc的调用都不会导致对sbrk的调用。
发布于 2011-12-13 13:53:44
malloc使用sbrk--用于更改数据段的系统调用K&R C有一个附录,介绍了使用sbrk系统调用的malloc、free的实现。
https://stackoverflow.com/questions/8484863
复制相似问题