[英]What if I allocate memory using mmap instead of malloc?
使用mmap
(使用MAP_PRIVATE和MAP_ANONYMOUS)分配内存比使用malloc
什么缺点? 对于函数作用域中的数据,我会使用堆栈内存,因此不使用malloc.
想到的一个缺点是动态数据结构,例如树和链表,您经常需要分配和释放小块数据。 由于两个原因,使用mmap
会很昂贵,一个用于分配4096字节的粒度,另一个用于要求进行系统调用。
但在其他情况下,你认为malloc
比mmap
更好吗? 其次,我是否高估了mmap
对动态数据结构的不利影响?
我可以想到的mmap
优于malloc
一个优点是,当你执行munmap
时,内存会立即返回到操作系统,而对于malloc/free
,我想内存uptil数据段断点永远不会返回,但保留重用。
是的, malloc
比mmap
。 它更容易使用,更细粒度和更便携。 最后,无论如何它都会调用mmap
。
如果您开始使用mmap
进行日常内存管理,那么您将需要实现某种方式,将其分成小块而不是页面,最终可能会以次优的方式重新实现malloc
。
首先, mmap()
是一个特定于平台的构造,所以如果你打算编写可移植的C,那么它已经完成了。
其次, malloc()
基本上是用mmap()
,但它是一种围绕系统调用的智能库包装器:它会在需要时从系统请求新的内存,但在此之前它会选择一块内存。已经致力于该过程的区域。
因此,如果要进行普通的动态内存分配,请使用malloc()
,故事结束。 使用mmap()
进行内存分配应该保留用于特殊情况(例如,如果你真的想要自己整页,在页面边界对齐),并且总是抽象成一段库代码,以便其他人可以很容易地理解什么你在做。
mmap
具有malloc
不具备的一个特性是mmap
允许您使用Huge Pages进行分配(flag参数具有MAP_HUGETLB
集),而malloc
没有该选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.