保留的内存地址?

时间:2010-03-15 14:59:22

标签: memory memory-management reserved

是否有一个保留的内存地址列表 - 用户空间程序的内存永远不能分配给的地址列表?我意识到这很可能是每个操作系统或每个架构,但我希望有人可能知道一些更常见的操作系统和拱门。我只能为几个版本的Windows挖掘一个:

  

对于Windows NT,2k和XP将是:

     

0x00000000 - 0x0000ffff - >最低页面受到保护以简化调试

     

0x00001000 - 0x7ffeffff - >应用程序的内存区域

     

0x7fff0000 - 0x7fffffff - >保护区域,以防止记忆功能损坏以下部分

     

0x80000000 - 0xffffffff - >包含驱动程序等系统所在的内存

任何人都知道Linux或BSD(或其他任何事情)?

1 个答案:

答案 0 :(得分:1)

Linux通常配置为由内核拥有0xC000000到0xFFFFFFFF。这可以改变(例如臭名昭​​着的4GB-4GB分割,不保留)。 glibc通常加载为0xB000000。

在Linux下,特定的mmap()调用可以请求0x00000000,除非被安全sysctl阻止(结果是一个坏主意阻塞)。

重新分配NULL:

  

NULL只能显式分配,所以我假设执行它的程序是为这样做的结果而准备的。 GCC需要至少-fno-delete-null-pointer-checks才能使受影响的代码正常运行。我被告知这是为了模拟在那里映射零页面的旧BSD行为。