如何在 x86_64 的前 4GB 内 'malloc'

How to 'malloc' within first 4GB on x86_64

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

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

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

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

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

大多数 malloc-s 实现都使用系统 mmap(或 sbrksyscalls (see e.g. syscalls(2) on Linux, and memory(3) for MacOSX), and these are giving some arbitrary memory addresses (e.g. because of ASLR,这非常有用。

PS。在 Linux 上,您可能会使用 mmap(2) with MAP_NORESERVE or MAP_32BIT, but MacOSX mmap(2) 似乎没有它们。