mmap 是否返回对齐的指针值

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

mmap()
是否保证返回值与系统上的最大对齐方式对齐? 即 POSIX 标准是否保证 mmap 必须返回
alignof(std::max_align_t)
倍数的指针值?

我无法在 Ubuntu linux mmap(2) 手册页或 mac osx mmap(2) 手册页上找到此信息

c++ alignment mmap
1个回答
14
投票

是的。

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,因此将进行对齐。

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