代码之家  ›  专栏  ›  技术社区  ›  Nate

保留的内存地址?

  •  3
  • Nate  · 技术社区  · 15 年前

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

    对于Windows NT、2K和XP,这将是:

    0x0000000-0x0000 ffff->最低页受到保护,以简化调试

    0x0001000-0x7ffefff->应用程序的内存区域

    0x7fff0000-0x7fffffff->保护区,防止内存功能损坏以下部件

    0x8000000-0xffffffff->内存,其中包含驱动程序等

    有人知道Linux或BSD(或者其他相关的东西)吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Joshua    15 年前

    Linux通常由内核配置为拥有0xc00000到0xffffffff。这是可以改变的(例如,臭名昭著的4GB-4GB分割没有保留)。glibc通常加载在0xb000000。

    在Linux下,可以通过特定的mmap()调用请求0x0000000,除非被安全sysctl阻止(原来阻止是个坏主意)。

    重新分配空值:

    空值只能显式地分配,所以我假设执行它的程序是为这样做的结果准备的。至少 -fno-delete-null-pointer-checks GCC要求受影响的代码运行。我被告知这是为了模仿旧的BSD行为,它将零页映射到那里。

    推荐文章