linux - mmap 不适用于高地址内存映射?

标签 linux memory mmap

我正在努力

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/

相关文章:

c - 如何防止编译器优化内存访问基准 read() vs mmap() 性能?

c++ - 如何使用 boost 从 mmap 文件中读取异构二进制数据?

SQLite 3 没有在 Golang 中释放内存

java - 使用自动装箱的内存泄漏

c# - 在 Perfmon 中看到高 "% Time in GC"的原因

c++ - 在给定 XWindow* 的 X (*nix) 上实现剪贴板功能?

c - 内存分配阈值(mmap 与 malloc)

linux - Linux 守护进程中的高效文件检查

linux - 如何使用 xterm.js 创建基于 web 的终端以 ssh 进入本地网络上的系统

c - Linux 守护进程 localhost 有效,但实际 IP 无效