【发布时间】:2014-12-21 13:10:15
【问题描述】:
我对 C++ 比较陌生,我正在学习其他人的代码。 他的代码从映射文件中读取,但最终没有释放任何映射内存。据我了解, mmap() 将文件映射到虚拟内存中。我不需要以某种方式释放那些映射的内存,比如调用 munmap() 吗?
【问题讨论】:
标签: c++ garbage-collection mmap
我对 C++ 比较陌生,我正在学习其他人的代码。 他的代码从映射文件中读取,但最终没有释放任何映射内存。据我了解, mmap() 将文件映射到虚拟内存中。我不需要以某种方式释放那些映射的内存,比如调用 munmap() 吗?
【问题讨论】:
标签: c++ garbage-collection mmap
munmap 在exit 上自动发生
因此,如果程序无论如何都要退出,您实际上不需要这样做。
man munmap4.15 说:
munmap() 系统调用删除指定地址范围的映射,并导致对该范围内地址的进一步引用生成无效的内存引用。该地区也是 进程终止时自动取消映射。另一方面,关闭文件描述符并不会取消映射该区域。
如果程序没有退出,当然,你会泄漏内存,就像malloc(现在使用mmap)一样。
【讨论】:
我相信你应该用 munmap 释放映射内存。但它会在 exit() 之后自动释放(如关闭常规文件或套接字的系统调用)。请记住,隐式关闭/取消映射是不好的风格!
【讨论】:
当你完成后只需使用 munmap() 除非你的程序正在退出,那么就没有必要了,它会在退出时自动取消映射段。
【讨论】: