Linux中mremap功能的特点

时间:2013-04-18 10:13:58

标签: c++ c linux

在Linux中,mremap函数用于重新映射使用mmap映射的内存。请帮我澄清以下内容:

  1. 如果mremap功能失败,那么旧映射内存的状态是什么?
  2. 如果mremap功能失败,是否需要调用函数munmap?
  3. 如果mremap功能成功,重映射内存中是否有以前的数据?

1 个答案:

答案 0 :(得分:1)

mremap尝试就地增加分配,但如果不能增加当前区域的大小,则会回退到分配新区域。

  

mremap()扩展(或缩小)现有的内存映射,可能同时移动它(由flags参数和可用的虚拟地址空间控制)。 src

  1. 如果mremap失败,旧内存就好了(就像realloc一样)。

  2. 如果mremap失败,那就没有什么可以直接映射(至少来自调用)。见第1项。

  3. 如果mremap成功并且必须移动,则将旧内存复制到新内存(以及旧版本的munmap)。如果mremap能够就地增加大小,则不会移动内存并且不会创建新分配。