私は、同じアドレスから複数のマッピングを開始することができなかったため、マッピングされたメモリのサイズが1つのパラメータに渡されるのはなぜだろうか(なぜですか?)、なぜLinuxカーネルは両方の開始アドレス、長さは一緒になりますが、ユーザー空間プログラムはそれらを覚えています。munmapにパラメータとして長さが必要なのはなぜですか?
私は、情報ツリーを格納するための主キーとして開始アドレスを使用するだけです。
私は、同じアドレスから複数のマッピングを開始することができなかったため、マッピングされたメモリのサイズが1つのパラメータに渡されるのはなぜだろうか(なぜですか?)、なぜLinuxカーネルは両方の開始アドレス、長さは一緒になりますが、ユーザー空間プログラムはそれらを覚えています。munmapにパラメータとして長さが必要なのはなぜですか?
私は、情報ツリーを格納するための主キーとして開始アドレスを使用するだけです。
map
、例えば、5ページ以降unmap
のいずれかが可能です。どのページをアンマップするかについての情報は、長さがページサイズの倍数であるアドレスと長さとして渡されます。
munmap
以前にマップしたメモリアドレスの部分範囲を指定できます。例:
#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
int main()
{
int pagesize = sysconf(_SC_PAGESIZE);
char *addr = mmap(NULL, 4 * pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
addr[pagesize] = 'X';
munmap(addr, pagesize);
printf("%c\n", addr[pagesize]);
}