3

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

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

1 回答 1

4

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

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

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

  2. 如果 mremap 失败,则 munmap 没有任何东西(至少来自这个调用)。见第 1 项。

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

于 2013-04-18T10:27:26.827 回答