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()
不会在那里分配新页面。
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()
不会在那里分配新页面。