我对C ++比较陌生,我正在学习另一个人的代码。 他的代码从mmapped文件读取,但最终没有释放任何映射内存。据我所知,mmap()将文件映射到虚拟内存中。我不需要以某种方式释放那些映射的内存,比如调用munmap()吗?
答案 0 :(得分:2)
我相信你应该用munmap释放映射内存。但是它会在exit()之后自动释放(比如关闭常规文件或套接字的系统调用)。请记住,隐式关闭/取消映射是糟糕的风格!
答案 1 :(得分:1)
完成后只需使用munmap(),除非程序退出,否则没有必要,它将在退出时自动取消映射段。
答案 2 :(得分:1)
munmap
在exit
上自动发生
因此,无论如何该程序都将退出,您实际上并不需要这样做。
man munmap
4.15说:
munmap()系统调用删除指定地址范围的映射,并导致对该范围内地址的进一步引用生成无效的内存引用。该地区也是 进程终止时自动取消映射。另一方面,关闭文件描述符并不会取消映射该区域。
当然,如果程序没有退出,则会泄漏内存,就像malloc
(如今使用mmap
)一样。