mmap()
是否保证返回值与系统中最大的对齐方式对齐?即,POSIX标准是否保证mmap必须返回alignof(std::max_align_t)
的倍数的指针值?
我无法在Ubuntu linux mmap(2)手册页或mac osx mmap(2)手册页中找到此信息
答案 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,所以它将被分配。