Linux manpage和 POSIX standard指定,只要未提供 MAP_FIXED
标志,mmap
就保证不会返回从地址 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 - Mac 上的 mmap 可以返回 null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46354422/