繁体   English   中英

如果我使用mmap而不是malloc分配内存怎么办?

[英]What if I allocate memory using mmap instead of malloc?

使用mmap (使用MAP_PRIVATE和MAP_ANONYMOUS)分配内存比使用malloc什么缺点? 对于函数作用域中的数据,我会使用堆栈内存,因此不使用malloc.

想到的一个缺点是动态数据结构,例如树和链表,您经常需要分配和释放小块数据。 由于两个原因,使用mmap会很昂贵,一个用于分配4096字节的粒度,另一个用于要求进行系统调用。

但在其他情况下,你认为mallocmmap更好吗? 其次,我是否高估了mmap对动态数据结构的不利影响?

我可以想到的mmap优于malloc一个优点是,当你执行munmap时,内存会立即返回到操作系统,而对于malloc/free ,我想内存uptil数据段断点永远不会返回,但保留重用。

是的, mallocmmap 它更容易使用,更细粒度和更便携。 最后,无论如何它都会调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM