【问题标题】:How to 'malloc' within first 4GB on x86_64如何在 x86_64 上的前 4GB 内“malloc”
【发布时间】:2015-02-22 18:13:15
【问题描述】:

平台:Mac OS X
朗:Obj-C/C

是否有可能以某种方式使“malloc”在进程地址空间的前 4GB 内分配内存?

我正在模拟 i386 堆栈,需要保证地址在允许的 32 位范围内。

使用 mmap+MAP_FIXED 需要在任何 'malloc' 之前保留内存,这不太方便。带有约束的“malloc”会更方便。

【问题讨论】:

  • 在 Linux 上有一个标志 MAP_32BIT 可以传递给 mmap 以请求前 2 GB 中的地址。也许 Mac OS X 也有类似的功能?

标签: c memory-management


【解决方案1】:

这是不可能的,除非您编写自己的 malloc 实现代码(或深入了解一些现有 malloc 的实现细节,然后根据您的需要进行更改)。

大多数malloc-s 实现都使用mmap(或sbrksyscalls 系统(例如Linux 上的syscalls(2) 和MacOSX 上的memory(3)),这些提供了一些任意内存地址(例如因为ASLR,这非常有用)。

PS。在 Linux 上,您可以将mmap(2)MAP_NORESERVEMAP_32BIT 一起使用,但MacOSX 的mmap(2) 似乎没有它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 2017-12-21
    • 2011-10-20
    • 1970-01-01
    • 2012-03-13
    • 2013-11-27
    • 2014-09-12
    • 2020-10-26
    相关资源
    最近更新 更多