我知道64位PC使用的地址空间是[0,2^48)
,但是我可以使用 mmap 将文件映射到 2 48以上的地址吗?
我写了下面的代码,但发现映射的地址仍在里面[0,2^48)
。
int
main(void) {
const char* name = "/tmp/file";
int fd = open(name, O_RDONLY);
if (fd < 0) {
perror("open");
exit(-1);
}
int pageSize = sysconf(_SC_PAGE_SIZE);
void* targetAddr = (void*)(0UL - pageSize);
char* str = mmap(targetAddr, pageSize, PROT_READ, MAP_SHARED, fd, 0);
if (str == MAP_FAILED) {
perror("mmap");
exit(-1);
}
printf("addr: %p\n", str);
return 0;
}
示例输出:addr: 0x7fc761f6f000
是否甚至可以将某些文件映射到 2 48以上的地址mmap
?
如果没有,我如何利用“未使用的”bit48-bit63?
我只是好奇如何利用地址的高位。
操作系统:Ubuntu16.04
内存大小:4GB