我有一个程序需要将许多(100个)大小为10-100MB的文件进行映射。我需要同时将它们全部映射。 目前,我在程序开始时调用open,然后是mmap,在程序结束时是munmap和close。 通常情况下,在运行程序之前,我必须通过运行ulimit -n来调整打开文件的限制。 问题是我是否需要保持打开文件,或者我可以open mmap close 进行一些大数据处理,然后在完成后再进行munmap。 mmap的手册对此似乎并不十分清楚。
不,至少在Linux上关闭文件是没问题的。 手册页面清楚地说明: 另一方面,关闭文件描述符并不会取消映射区域。 为了可移植性,我还查阅了POSIX手册,它也说了同样的事情(虽然更加清晰): mmap() 函数向与文件描述符 fildes 关联的文件添加了一个额外的引用,该引用不会在该文件描述符的后续 close() 中被删除。这个引用会在没有更多的映射到该文件时被删除。
strace
)可执行文件时看到,共享库的映射遵循以下模式:打开描述符,映射它,关闭描述符。 - Kaz