簡體   English   中英

我是否需要munmap()mmap()文件?

[英]Do I have to munmap() a mmap() file?

我對C ++比較陌生,我正在向另一個人的代碼學習。 他的代碼從一個映射文件讀取,但最后沒有釋放任何映射的內存。 以我的理解,mmap()將文件映射到虛擬內存。 我不需要以某種方式釋放那些映射的內存,例如調用munmap()嗎?

我相信您應該使用munmap釋放映射的內存。 但是它將在exit()之后自動釋放(例如,關閉常規文件或套接字的syscall)。 請記住,隱式關閉/取消映射是不好的樣式!

完成后,僅需使用munmap(),除非您的程序正在退出,否則無需這樣做,它將在退出時自動取消映射該段。

munmapexit時自動發生

因此,如果該程序仍然要退出,則實際上並不需要這樣做。

man munmap 4.15說:

munmap()系統調用刪除指定地址范圍的映射,並導致對該范圍內地址的進一步引用以生成無效的內存引用。 進程終止時,該區域也會自動取消映射。 另一方面,關閉文件描述符不會取消映射區域。

如果程序沒有退出,那么當然會泄漏內存,就像使用malloc (如今使用mmap )一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM