malloc() 是否可能分配一个与使用mmap()分配的另一个缓冲区重叠的缓冲区?

4

我打算使用mmap()函数在靠近特定地址的位置分配一个缓冲区。

我担心使用mmap()分配的缓冲区会与使用malloc()或new运算符(C++)分配的其他缓冲区重叠。这种情况可能发生吗?

3个回答

6
如果您使用MAP_FIXED来要求mmap在特定地址创建映射,则是可能的,您将覆盖现有映射,例如malloc分配的空间,共享库的代码或数据段等。基本上,除非您已经通过调用不指定MAP_FIXEDmmap获取了地址范围(因此知道它属于您),否则使用MAP_FIXED始终是错误的;在这种情况下,您可以故意使用MAP_FIXED覆盖映射的部分内容。

其他答案似乎都没有注意到您说“靠近特定地址”,这对我来说意味着使用MAP_FIXED。如果您没有使用MAP_FIXED,请详细说明如何获取“靠近特定地址”的映射。


1

你必须使用malloc分配映射的内存。使用malloc分配的内存不会重叠。所以,不用担心,一切都会很好。


1

不,那是不会发生的。

malloc 函数维护的堆位于通过 brkmmap 建立的虚拟映射中,因此仅当内核通过两次 mmap 分配相同的块时,才能重新使用内存区域。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接