2011-12-13 69 views
1

我想了解C和malloc和sbrk之间的区别,以及它们如何相互关联。从我的理解malloc和sbrk几乎是相同的东西,但我读了malloc使用sbrk分配内存。这真的让人困惑吗?有人可以给我解释一下吗?了解C 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

http://stackoverflow.com/questions/2076532/how-does-sbrk-work-in-c –

回答

9

sbrk请求更多的内存。这是一个相当低级的功能,不太灵活。

malloc使用sbrk,但更灵活。一般来说,malloc将询问sbrk大块的内存,然后释放这些大块的块。所以多数致电malloc而不是导致致电sbrk

+0

所以这个例子多少次malloc会调用sbrk? –

+1

它可能只是调用它一次,因为你要分配10个10字节的块。即使有malloc的开销,这也相当小。操作系统只能以4096字节的倍数分发内存(在大多数系统上)。如果你确实想知道,在调试器下运行它,并在sbrk上放置一个断点。 –

+0

所以我在sbrk放了一个断点,就像你说的那样,它只调用一次。但是,因为我有2个电话sbrk没有错?一个开始,一个结束? –

3

malloc使用用于改变数据段 ķ& R C具有通过mallocfree执行行走使用sbrk SYS呼叫的附录sbrk --a系统调用。