我正在努力
memory = (char *)mmap((void *)0X0000100000000000,(size_t)0xffffffff/8,PROT_READ | PROT_WRITE , MAP_SHARED|MAP_ANONYMOUS,4,0);
但它没有映射任何东西并返回 0。我需要在 64 位机器的高地址映射内存。
最佳答案
这并不是一个完整的答案——更多的是可能的解释:
0X0000100000000000 是 281474976710656。你有那么高的可用虚拟内存地址吗?或者换句话说:该地址在您的操作系统中有效吗?我想答案是否定的。
mmap 实际上返回 MAP_FAILED ( (void *) -1 ) 吗?通常当你给 mmap 一个它不喜欢的地址时,你会得到 MAP_FAILED 和 errno == EINVAL。你检查过errno了吗?
注意:4 字节不是 64 位操作系统中的字长,通常是 8。例如,4 字节的字不能寻址所有内存。
关于linux - mmap 不适用于高地址内存映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24520887/