是否有可能malloc()分配一个缓冲区重叠使用mmap()分配的另一个缓冲区?
问题描述:
我打算使用mmap()来分配一个接近特定地址的缓冲区。是否有可能malloc()分配一个缓冲区重叠使用mmap()分配的另一个缓冲区?
我担心的是,使用mmap()分配的缓冲区将覆盖由malloc()或new运算符(C++)分配的其他缓冲区。可能吗?
答
不,这没有发生。
由malloc
功能维持堆居住在已通过brk
或mmap
已经建立,因此,如果内核通过mmap
给出了同一块内存的两倍地区只能重复使用虚拟映射。
答
您必须使用malloc分配映射的内存。 malloced内存不会重叠。所以不,你会没事的。
答
如果使用MAP_FIXED
要求mmap
在一个特定的地址创建映射,然后是有可能您覆盖现有的映射如malloc
分配空间,共享库的代码或数据段的一部分,等基本上,使用MAP_FIXED
总是错误的,除非你已经通过mmap
的调用获得了地址范围,而没有指定MAP_FIXED
(所以你知道它属于你)。在这种情况下,您可以使用MAP_FIXED
有意覆盖部分映射)。
其他答案似乎都错过了你说“接近特定地址”的事实,这对我来说意味着MAP_FIXED
。如果您没有使用MAP_FIXED
,请详细说明您如何获得“接近特定地址”的映射。
如果您使用'MAP_FIXED'这个答案是错误的...... – 2012-02-16 16:57:06
@R,你说得对。 – 2012-02-16 17:24:17