64비트 PC에서 사용되는 주소 공간은 이라는 것을 알고 있지만 mmap을 사용하여 파일을 2 48[0,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