我想在64位ARM上的32位地址空间内分配一个缓冲区。换句话说,我想确保我的缓冲区绑定到较低的32位地址空间。你知道一个很好的C函数吗?
答案 0 :(得分:4)
没有C标准功能。但是,由于您将问题标记为Linux,请查看mmap(2)
以及MAP_ANONYMOUS
和MAP_32BIT
标记,例如:
mmap(
0, 1,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT,
-1, 0
);
另一个选择是使用MAP_FIXED
标志在较低的32位地址空间中传递显式地址:
mmap(
(void *)0x10000, 1,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED,
-1, 0
);