fie*_*sor 12 linux macos posix mmap ios
有谁知道为什么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的存在感到困惑.
dus*_*uff 11
在某些罕见的情况下,mmap()实际上会在地址0x0处创建映射.目前,它通常需要root权限(或者mmap_min_addr在Linux系统上将sysctl设置为零),但这是可能的.如果创建了这样的映射,则可以写入该地址.
MAP_FAILED另一方面,它永远不是有效的返回值mmap(),所以它可以用作哨兵.
| 归档时间: |
|
| 查看次数: |
4924 次 |
| 最近记录: |