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

问题描述 投票:2回答:3

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

c++ garbage-collection mmap
3个回答
2
投票

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


1
投票

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


1
投票

munmap自动发生在exit

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

man munmap 4.15说:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.