Mmap不适用于高地址内存映射?

时间:2014-07-01 23:51:11

标签: linux memory mmap

我正在尝试

memory = (char *)mmap((void *)0X0000100000000000,(size_t)0xffffffff/8,PROT_READ | PROT_WRITE , MAP_SHARED|MAP_ANONYMOUS,4,0);

但它没有映射任何东西并返回0.我需要在64位机器的高地址映射内存。

1 个答案:

答案 0 :(得分:1)

这并不是一个完整的答案 - 更多可能的解释:

0X0000100000000000是281474976710656.您是否有可用的虚拟内存地址?或者说另一种方式:该地址在您的操作系统中是否有效?我猜答案是否定的。

mmap实际上是否返回MAP_FAILED((void *)-1)?通常当你给mmap一个它不喜欢的地址时,你得到MAP_FAILED和errno == EINVAL。你检查过errno吗?

注意:4字节不是64位操作系统中的字长,通常是8.例如,4字节字不能解决所有内存。