如何在32位地址space内分配缓冲区?
How to allocate buffer within 32-bit address space?
我想在 64 位 ARM 上分配 32 位地址内的缓冲区 space。换句话说,我想确保我的缓冲区绑定到较低的 32 位地址 space。你知道一个很好的 C 函数吗?
没有 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 位地址 space 中传递一个显式地址:
mmap(
(void *)0x10000, 1,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED,
-1, 0
);
我想在 64 位 ARM 上分配 32 位地址内的缓冲区 space。换句话说,我想确保我的缓冲区绑定到较低的 32 位地址 space。你知道一个很好的 C 函数吗?
没有 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 位地址 space 中传递一个显式地址:
mmap(
(void *)0x10000, 1,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED,
-1, 0
);