【发布时间】:2014-08-25 02:35:32
【问题描述】:
有人知道为什么 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 的存在感到困惑。
【问题讨论】:
标签: ios linux macos posix mmap