Хотя запрошенный адрес сопоставления является началом страницы, он будет использовать адрес, сдвинутый на несколько страниц.
Я пытаюсь сделать что-то вроде этого:
char *mapped = mmap(base, page_size, PROT_NONE, MAP_SHARED,
file_handle, 0);
printf("Base : %p\n", base);
printf("Mapped: %p\n", mapped);
Пример вывода (page_size
= 4096
= 0x1000
):
Base : 0x7f22a1047000
Mapped: 0x7f22a1045000
Офсет 2 страницы. Это также, кажется, зависит от length
. Например, если вместо одной страницы я попытаюсь отобразить 4 страницы, вывод будет таким:
Base : 0x7fd24d994000
Mapped: 0x7fd24d98f000
что составляет 5 страниц смещения.
Почему оно так себя ведет?