【发布时间】:2025-12-01 06:15:03
【问题描述】:
我被specification of mmap弄糊涂了。
设pa为mmap的返回地址(同规范)
pa = mmap(addr, len, prot, flags, fildes, off);
我认为函数调用成功后,以下范围是有效的
[pa,pa+len)
我的问题是以下范围是否仍然有效?
[round_down(pa, pagesize) , round_up(pa+len, pagesize) )
[base, base + size] 简称
也就是说:
-
base是否始终与页面边界对齐? -
size是否总是 pagesize 的倍数(粒度就是 pagesize)?
感谢您的帮助。
我认为这一段暗示了:
off 参数被限制为根据sysconf() 在传递_SC_PAGESIZE 或_SC_PAGE_SIZE 时返回的值进行对齐和调整大小。当指定 MAP_FIXED 时,应用程序应确保参数 addr 也满足这些约束。 该实现对整个页面执行映射操作。因此,虽然参数 len 不需要满足大小或对齐约束,但实现应在任何映射操作中包括由范围 [pa,pa+len) 指定的任何部分页面。
但我不确定,我在 POSIX 方面没有太多经验。
- 请给我一些更多明确和更多确定性证据
- 或者告诉我至少一个支持 POSIX 并且具有不同行为的系统
谢谢阿甘。
【问题讨论】:
标签: c memory posix alignment mmap