【发布时间】:2012-01-15 13:32:10
【问题描述】:
使用mmap(带有MAP_PRIVATE 和MAP_ANONYMOUS)分配内存比使用malloc 有什么缺点?对于函数范围内的数据,无论如何我都会使用堆栈内存,因此不会使用malloc.
想到的一个缺点是动态数据结构,例如树和链表,您经常需要分配和释放小块数据。使用 mmap 会很昂贵,原因有两个,一个是分配 4096 字节的粒度,另一个是需要进行系统调用。
但在其他情况下,你认为malloc 比mmap 更好吗?其次,我是否高估了mmap 对于动态数据结构的劣势?
mmap 相对于malloc 的一个优势我能想到的是,当您执行munmap 时,内存会立即返回给操作系统,而使用malloc/free,我猜内存直到数据段断点是从未返回,但保留以供重复使用。
【问题讨论】:
-
malloc 会为你调用 mmap,如果需要的话……只要坚持使用 malloc。
-
另一个缺点是,如果你在调用
mmap时乱扔代码,它的可移植性就会降低。 -
为什么要让生活变得过于复杂?
-
Malloc 更适合小分配和高比例的 malloc/free,而不是不那么大的大小。这是因为 malloc 可以向一个巨大的池请求小型请求并从中进行小型分配/解除分配,而无需任何 mmap/munmap。
-
我认为这将是真正有用的唯一地方是实现内存池。使用 malloc,您会让自己对碎片持开放态度。使用 mmap,您可以将整个池返回给操作系统,而不会在地址空间的末尾留下一个很小的字符串片段(例如)。
标签: c linux memory-management malloc mmap