是否总是在mmap中为常规文件添加MAP_NORESERVE标志?

问题描述 投票:1回答:1

根据mmapmanual

MAP_NORESERVE

不为此映射保留交换空间。交换空间时是保留的,有人保证可以修改映射。如果不保留交换空间,则可能会得到如果没有可用的物理内存,则写SIGSEGV。

据我了解,如果将常规文件映射到虚拟地址范围中,则不需要任何交换空间。只有MAP_ANONYMOUS可能需要一些交换空间。

所以,总是在常规文件的MAP_NORESERVE中添加mmap标志是否正确?

更新:

更具体地说,当使用MAP_NORESERVE时,总是在mmap中为常规文件添加MAP_SHARED标志是否正确?

c linux operating-system mmap page-caching
1个回答
1
投票
据我了解,如果将常规文件映射到虚拟地址范围中,则不需要任何交换空间。只有MAP_ANONYMOUS可能需要一些交换空间。
取决于mmap标志。如果将常规文件映射为MAP_PRIVATE,则存储区域是从文件中进行的[[初始化,而不是文件中的[[后备]]。如果系统决定换出其任何页面,则系统将需要用于此类映射的交换空间。

所以,总是在常规文件的MAP_NORESERVE中添加mmap标志是否正确?

不是不正确
为任何映射指定MAP_NORESERVE。这只是一个关于程序行为要保证什么的问题。
此外,您似乎从错误的方向看待这个问题。如果特定的映射永远不需要交换空间,那么系统将不为其保留交换空间,而不考虑标志。在这种情况下使用MAP_NORESERVE并没有什么害处,但也没有帮助,那有什么用呢?

另一方面,如果要确保使用MAP_NORESERVE不会导致映射失败,那么最适当的措施是避免使用该标志。如果需要,您可以完全忽略它的存在,而实际上,如果要最大的可移植性就应该这样做,因为MAP_NORESERVE是POSIX未指定的Linux扩展。

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