mmap()
是否保证返回值与系统上的最大对齐方式对齐? 即 POSIX 标准是否保证 mmap 必须返回 alignof(std::max_align_t)
倍数的指针值?
我无法在 Ubuntu linux mmap(2) 手册页或 mac osx mmap(2) 手册页上找到此信息
是的。
http://man7.org/linux/man-pages/man2/mmap.2.html
如果是最“流行”的
NULL
映射
如果addr为NULL,则内核选择要写入的地址 创建映射;这是创建新的最便携的方法 映射。 如果addr不为NULL,那么内核将其作为提示 关于放置映射的位置; 在 Linux 上,映射将为 在附近的页面边界创建。新映射的地址是 作为调用结果返回。
即使您指定
MAP_FIXED
那么
不要将 addr 解释为提示:将映射准确地放置在该处 地址。 addr 必须是页面大小的倍数。 如果记忆 addr 和 len 指定的区域与任何现有的页面重叠 映射,那么现有映射的重叠部分将 被丢弃。 如果指定的地址无法使用,mmap()将 失败。 因为映射需要固定地址的情况较少 便携式,不鼓励使用此选项。
事实上,最小的页面是 4096B(对于 x86,但对于其他平台,无论如何它都是 1024B 的倍数),并且由于
std::max_align_t
在 64 位系统上最有可能是 16B,因此将进行对齐。