我必须要munmap()一个mmap()文件吗?

时间:2014-10-26 02:26:41

标签: c++ garbage-collection mmap

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

完成后只需使用munmap(),除非程序退出,否则没有必要,它将在退出时自动取消映射段。

答案 2 :(得分:1)

munmapexit上自动发生

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

man munmap 4.15说:

  

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

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