如何在 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
(或 sbrk
)syscalls (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) 似乎没有它们。
平台:Mac OS X
朗:Obj-C/C
是否有可能以某种方式使 'malloc' 在进程地址 space 的前 4GB 内分配内存?
我正在模拟 i386 堆栈,需要保证地址在允许的 32 位范围内。
使用mmap+MAP_FIXED需要在任何'malloc'之前预留内存,不太方便。 'malloc' 有约束会更方便。
这是不可能的,除非您编写自己的 malloc
实现(或深入研究某些现有 malloc
的实现细节,然后根据您的需要进行更改)。
大多数 malloc
-s 实现都使用系统 mmap
(或 sbrk
)syscalls (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) 似乎没有它们。