调用malloc()
后,内存mmap()
到free()
是否立即返回操作系统?
答案 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的空闲或已使用块列表无关,并且它们在释放时会返回系统。