内存malloc()通过mmap()在调用free()后立即返回OS吗?

时间:2016-12-21 06:51:34

标签: c memory

调用malloc()后,内存mmap()free()是否立即返回操作系统?

2 个答案:

答案 0 :(得分:2)

请注意,mmap是一个系统调用,可能非常昂贵。 malloc实现注意避免过于频繁地调用它,这就是为什么他们管理以前的free-d区域以便稍后重新使用它们(在更多的malloc-s中),而不需要任何系统调用。 在实践中,大多数malloc实现管理不同的大分配(例如超过一兆字节),这些分配通常在malloc和freemap时进行映射。

在malloc上进行mmap-ed,当你自由时(内部munmap),内存会立即返回给操作系统。

你可以研究一些malloc的源代码。

答案 1 :(得分:2)

根据http://man7.org/linux/man-pages/man3/mallopt.3.html

  

对于大于或等于指定限制的分配(in   由空闲列表无法满足的M_MMAP_THRESHOLD字节)   内存分配函数使用mmap(2)而不是增加   程序使用sbrk(2)打破。

     

使用mmap(2)分配内存具有明显的优势   分配的内存块总是可以独立释放回来   系统。 (相比之下,只有内存可以修剪堆   释放在最高端。)另一方面,有一些   使用mmap(2)的缺点:未放置解除分配的空间   在空闲列表中以供以后分配重用;

因此,应该在mmap的帮助下进行的大量分配与malloc的空闲或已使用块列表无关,并且它们在释放时会返回系统。