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