Linux中mremap函数的特性

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

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

mremap试图增加分配的位置,但如果不能增加当前区域的大小,则会回到分配新的区域。

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

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

  2. 如果mremap失败,没有任何东西需要通过映射(至少从这个调用中)。 见第1项。

  3. 如果mremap成功并且必须移动,那么旧的内存将被复制到新的内存中(旧的内存将会自动映射)。 如果mremap能够在原地增加大小,则内存不会移动,也不会创建新的分配。