我打算使用mmap()函数在靠近特定地址的位置分配一个缓冲区。
我担心使用mmap()分配的缓冲区会与使用malloc()或new运算符(C++)分配的其他缓冲区重叠。这种情况可能发生吗?
我打算使用mmap()函数在靠近特定地址的位置分配一个缓冲区。
我担心使用mmap()分配的缓冲区会与使用malloc()或new运算符(C++)分配的其他缓冲区重叠。这种情况可能发生吗?
MAP_FIXED
来要求mmap
在特定地址创建映射,则是可能的,您将覆盖现有映射,例如malloc
分配的空间,共享库的代码或数据段等。基本上,除非您已经通过调用不指定MAP_FIXED
的mmap
获取了地址范围(因此知道它属于您),否则使用MAP_FIXED
始终是错误的;在这种情况下,您可以故意使用MAP_FIXED
覆盖映射的部分内容。
其他答案似乎都没有注意到您说“靠近特定地址”,这对我来说意味着使用MAP_FIXED
。如果您没有使用MAP_FIXED
,请详细说明如何获取“靠近特定地址”的映射。
你必须使用malloc分配映射的内存。使用malloc分配的内存不会重叠。所以,不用担心,一切都会很好。
不,那是不会发生的。
malloc
函数维护的堆位于通过 brk
或 mmap
建立的虚拟映射中,因此仅当内核通过两次 mmap
分配相同的块时,才能重新使用内存区域。