Linux 手册页和 POSIX 标准都指定,只要不提供MAP_FIXED
标志,mmap
就可以保证不返回从地址 0 开始的内存。但是,Macmmap
手册页中没有记录此类保证。
我不确定Mac对POSIX的遵守有多严格。它的mmap
提供这种保证吗?
macOS 符合 POSIX 标准。事实上,它被认证为正式符合UNIX标准,这意味着符合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()
不会在那里分配新页面。