我对C++比较陌生,我正在从另一个人的代码中学习。他的代码从毫米波文件中读取,但最终没有释放任何映射内存。据我理解,mmap()将文件映射到虚拟内存中。我不需要以某种方式释放那些映射的内存,比如调用munmap()吗?
发布于 2014-10-26 02:35:33
我相信你应该用munmap释放映射内存。但是它将在exit()之后自动释放(就像关闭常规文件或套接字的syscall一样)。记住,隐式关闭/取消映射是糟糕的风格!
发布于 2014-10-26 02:35:12
当您完成时,只需使用munmap(),除非您的程序退出,否则就没有必要了,它将在退出时自动解除对该段的映射。
发布于 2018-08-27 14:15:39
munmap 自动发生在 exit上
所以,如果程序无论如何都要退出,你就不需要这么做了。
man munmap 4.15说:
munmap()系统调用删除指定地址范围的映射,并使对范围内地址的进一步引用生成无效的内存引用。当进程终止时,该区域也会自动取消映射。另一方面,关闭文件描述符并不会解除对区域的映射。
当然,如果程序不退出,就会泄漏内存,就像malloc (现在使用mmap)一样。
https://stackoverflow.com/questions/26569217
复制相似问题