【问题标题】:Do I have to munmap() a mmap() file?我必须 munmap() 一个 mmap() 文件吗?
【发布时间】:2014-12-21 13:10:15
【问题描述】:

我对 C++ 比较陌生,我正在学习其他人的代码。 他的代码从映射文件中读取,但最终没有释放任何映射内存。据我了解, mmap() 将文件映射到虚拟内存中。我不需要以某种方式释放那些映射的内存,比如调用 munmap() 吗?

【问题讨论】:

    标签: c++ garbage-collection mmap


    【解决方案1】:

    munmapexit 上自动发生

    因此,如果程序无论如何都要退出,您实际上不需要这样做。

    man munmap4.15 说:

    munmap() 系统调用删除指定地址范围的映射,并导致对该范围内地址的进一步引用生成无效的内存引用。该地区也是 进程终止时自动取消映射。另一方面,关闭文件描述符并不会取消映射该区域。

    如果程序没有退出,当然,你会泄漏内存,就像malloc(现在使用mmap)一样。

    【讨论】:

      【解决方案2】:

      我相信你应该用 munmap 释放映射内存。但它会在 exit() 之后自动释放(如关闭常规文件或套接字的系统调用)。请记住,隐式关闭/取消映射是不好的风格!

      【讨论】:

        【解决方案3】:

        当你完成后只需使用 munmap() 除非你的程序正在退出,那么就没有必要了,它会在退出时自动取消映射段。

        【讨论】:

          猜你喜欢
          • 2017-10-11
          • 2014-11-23
          • 2018-07-11
          • 2011-03-02
          • 2017-05-19
          • 2016-03-27
          • 1970-01-01
          • 2022-12-17
          • 1970-01-01
          相关资源
          最近更新 更多