mmap是否返回对齐的指针值

时间:2017-02-15 20:34:42

标签: c++ alignment mmap

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

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

1 个答案:

答案 0 :(得分:5)

是的。

http://man7.org/linux/man-pages/man2/mmap.2.html

在大多数“流行”的NULL映射的情况下

  

如果addr为NULL,则内核选择要的地址   创建映射;这是创建新的最便携的方法   映射。如果addr不为NULL,则内核将其作为提示   关于映射的位置; 在Linux上,映射将是   在附近的页面边界创建。新映射的地址是   作为通话结果返回。

即使您指定MAP_FIXED而不是

  

不要将addr解释为提示:将映射放在那个位置   地址。 addr必须是页面大小的倍数。如果是记忆   addr和len指定的区域重叠任何现有的页面   map(s),然后是现有映射的重叠部分   被丢弃如果无法使用指定的地址,mmap()将会   失败。因为要求映射的固定地址较少   便携式,不鼓励使用此选项。

事实上最小的页面是4096B(对于x86,但对于其他平台,它是1024B的倍数),并且因为std :: max_align_t在64位系统上最有可能是16B,所以它将被分配。