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

Met*_*est 21 c linux malloc memory-management mmap

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

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

但在其他情况下,你认为哪个malloc更好mmap?其次,我是否过高估计mmap动态数据结构的缺点?

的一个优点mmap超过malloc我能想到的是,内存被立即返回到操作系统,当你这样做munmap,而用malloc/free的,我猜内存uptil数据段断点再也没有回来,但存放回用.

Fre*_*Foo 28

是的,mallocmmap.它更容易使用,更细粒度和更便携.最后,mmap无论如何都会打电话.

如果您开始使用日常内存管理mmap,您将需要实现某种方式将其分成小块而不是页面,并且最终malloc可能会以次优的方式重新实现.

  • 很好的深入答案,因为它提到 `malloc` 调用 `mmap`。 (2认同)

Ker*_* SB 19

首先,mmap()是一个特定于平台的构造,所以如果你打算编写便携式C,它已经出来了.

其次,malloc()本质上是实现的mmap(),但它是一种围绕系统调用的智能库包装器:它将在需要时从系统请求新内存,但在此之前它将在已经提交到的区域中选择一块内存.这个过程.

因此,如果你想做普通的动态内存分配,请使用malloc(),故事结束.mmap()用于内存分配的用途应该保留用于特殊情况(例如,如果你真的想要自己整页,在页面边界对齐),并且总是抽象成一段库代码,以便其他人可以很容易地理解你是什么这样做.


Mar*_*ata 5

一个功能mmapmalloc没有,是mmap让您在使用大内存页(标志参数必须分配MAP_HUGETLB集),而malloc没有这样的选择。