要求されたマッピング アドレスはページ開始ですが、数ページ分シフトされたアドレスが使用されます。
私はこのようなことをしようとしています:
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
です。たとえば、1 ページではなく 4 ページをマップしようとすると、出力は次のようになります。
Base : 0x7fd24d994000
Mapped: 0x7fd24d98f000
これは 5 ページのオフセットです。
なぜこのように振る舞うのですか?