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

时间:2012-02-16 16:11:59

标签: c++ c malloc new-operator mmap

我计划使用mmap()来分配一个接近特定地址的缓冲区。

我担心的是,使用mmap()分配的缓冲区将与malloc()或new运算符(C ++)分配的其他缓冲区重叠。可能吗?

3 个答案:

答案 0 :(得分:6)

如果您使用MAP_FIXED要求mmap在特定地址创建映射,那么是可能您覆盖现有映射,例如{分配的空间{1}},共享库的代码或数据部分的一部分等。基本上使用malloc始终是错误的,除非您已通过调用MAP_FIXED而未指定{已获得地址范围{1}}(所以你知道它属于你);在这种情况下,您可以使用mmap)故意覆盖部分映射。

其他答案似乎都错过了你说“接近特定地址”的事实,这对我来说意味着MAP_FIXED。如果您没有使用MAP_FIXED,请详细说明您如何获取“靠近特定地址”的地图。

答案 1 :(得分:1)

您必须使用malloc分配映射的内存。 malloced内存不会重叠。所以不,你会没事的。

答案 2 :(得分:1)

不,这不会发生。

malloc函数维护的堆存在于通过brkmmap建立的虚拟映射中,因此只有在内核给出相同的块时才能重用内存区域通过mmap两次。