Mac return 上的 mmap 可以为 null 吗?

Can mmap on Mac return null?

Linux manpage and the POSIX standard 都指定,只要未提供 MAP_FIXED 标志,mmap 就保证不会 return 从地址 0 开始的内存。但是,Mac mmap 联机帮助页中没有记录此类保证。

我不确定 Mac 对 POSIX 的遵守程度。它的 mmap 是否提供此保证?

macOS 兼容 POSIX。事实上,它是 certified as officially UNIX-compliant,这意味着 POSIX 合规。

此外,从链接器的 macOS 手册页中,ld:

 -pagezero_size size
             By default the linker creates an unreadable segment starting
             at address zero named __PAGEZERO.  Its existence will cause a
             bus error if a NULL pointer is dereferenced.  [...]
             By default on 32-bit architectures the page zero size
             is 4KB.  On 64-bit architectures, the default size is 4GB.
             [...]

因此,除非您做了一些非常不寻常的事情来禁用它,否则已经从地址 0 开始保留了一个或多个页面。因此,mmap() 不会在那里分配新页面。