如何在32位地址space内分配缓冲区?

How to allocate buffer within 32-bit address space?

我想在 64 位 ARM 上分配 32 位地址内的缓冲区 space。换句话说,我想确保我的缓冲区绑定到较低的 32 位地址 space。你知道一个很好的 C 函数吗?

没有 C 标准函数可以这样做。但是,由于您将问题标记为 Linux,请查看 mmap(2) 以及 MAP_ANONYMOUSMAP_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
);