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

时间:2018-03-28 12:33:35

标签: c linux arm 32bit-64bit memory-address

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

1 个答案:

答案 0 :(得分:4)

没有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位地址空间中传递显式地址:

mmap(
    (void *)0x10000, 1,
    PROT_READ | PROT_WRITE,
    MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED,
    -1, 0
);