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