我对 mmap 的规范感到困惑。
设为mmappa
的返回地址(与规范相同)
pa = mmap(addr, len, prot, flags, fildes, off);
在我看来,函数调用成功后,以下范围是有效的
[ 帕,帕 + 伦 )
我的问题是以下范围是否仍然有效?
[ round_down(pa, pagesize) , round_up(pa+len, pagesize) )
[ base, base + size ] 简称
也就是说:
- 总是
base
在页面边界上对齐? - 总是
size
页面大小的倍数(换句话说,粒度是页面大小)?
谢谢你的帮助。
我认为本段暗示了这一点:
off参数被限制为根据sysconf()在传递 _SC_PAGESIZE 或 _SC_PAGE_SIZE 时返回的值进行对齐和调整大小。当指定 MAP_FIXED 时,应用程序应确保参数addr也满足这些约束。该实现对整个页面执行映射操作。因此,虽然参数 len 不需要满足大小或对齐约束,但实现应在任何映射操作中包括由范围 [pa,pa+len) 指定的任何部分页面。
但我不确定,我对 POSIX 没有太多经验。
- 请给我一些更明确和更确定的证据
- 或者告诉我至少一个支持 POSIX 并且具有不同行为的系统
谢谢阿甘。