mmap是否返回对齐的指针值

Cur*_*ous 6 c++ mmap alignment

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

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

Ant*_*nty 5

是的,它确实.

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,所以它将被对齐.