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

问题描述:

我打算使用mmap()来分配一个接近特定地址的缓冲区。是否有可能malloc()分配一个缓冲区重叠使用mmap()分配的另一个缓冲区?

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

不,这没有发生。

malloc功能维持堆居住在已通过brkmmap已经建立,因此,如果内核通过mmap给出了同一块内存的两倍地区只能重复使用虚拟映射。

+0

如果您使用'MAP_FIXED'这个答案是错误的...... – 2012-02-16 16:57:06

+0

@R,你说得对。 – 2012-02-16 17:24:17

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

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

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