gpt4 book ai didi

ios - 为什么 mmap() 使用 MAP_FAILED 而不是 NULL?

转载 作者:IT王子 更新时间:2023-10-28 23:54:35 25 4
gpt4 key购买 nike

有人知道为什么 mmap() 返回 MAP_FAILED 而不是 NULL 吗?在大多数系统上,MAP_FAILED 似乎是 (void*)-1。为什么 mmap() 不直接使用 NULL 呢?我知道地址 0x0 在技术上是一个有效的内存页面,而 (void*)-1 永远不会是一个有效的页面。然而我的猜测是 mmap() 实际上永远不会返回页面 0x0。例如,在 Windows 上,VirtualAlloc() 在出错时返回 NULL。

假设 mmap() 永远不会返回 0x0 是否安全?据推测,对 mmap() 的成功调用应该将可用内存返回给调用者。地址 0x0 永远不可用,因此它永远不会在成功时返回。在这种情况下,使用 0x0 作为失败标记似乎是明智的,这就是为什么我首先对 MAP_FAILED 的存在感到困惑。

最佳答案

在极少数情况下,mmap() 实际上会在地址 0x0 处创建映射。如今,它通常需要 root 权限(或者在 Linux 系统上将 mmap_min_addr sysctl 设置为零)但这是可能的。如果创建了这样的映射,就可以写入该地址。

另一方面,

MAP_FAILED 永远不是 mmap() 的有效返回值,因此它可用作哨兵。

关于ios - 为什么 mmap() 使用 MAP_FAILED 而不是 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24562691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com