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

Ale*_*nov 5 c memory-management

平台:Mac OS X
Lang:Obj-C/C.

有可能以某种方式让'malloc'在进程地址空间的前4GB内分配内存吗?

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

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

Bas*_*tch 6

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

大多数malloc-s实现使用系统mmap(或sbrk)系统调用(参见Linux上的syscalls(2)和MacOSX的内存(3)),这些实现了一些任意的内存地址(例如,因为ASLR非常有用) .

PS.在Linux上,你可以使用的mmap(2)MAP_NORESERVEMAP_32BIT,但MacOSX的MMAP(2)似乎并没有让他们.