其他分享
首页 > 其他分享> > 如何在32位地址空间内分配缓冲区?

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

作者:互联网

我想在64位ARM的32位地址空间内分配一个缓冲区.换句话说,我想确保缓冲区绑定到较低的32位地址空间.您知道一个不错的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位地址空间中传递一个显式地址:

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

标签:32bit-64bit,arm,memory-address,c-3,linux
来源: https://codeday.me/bug/20191025/1927326.html