2012-08-22 18 views
11

私は、同じアドレスから複数のマッピングを開始することができなかったため、マッピングされたメモリのサイズが1つのパラメータに渡されるのはなぜだろうか(なぜですか?)、なぜLinuxカーネルは両方の開始アドレス、長さは一緒になりますが、ユーザー空間プログラムはそれらを覚えています。munmapにパラメータとして長さが必要なのはなぜですか?

私は、情報ツリーを格納するための主キーとして開始アドレスを使用するだけです。

答えて

9

map、例えば、5ページ以降unmapのいずれかが可能です。どのページをアンマップするかについての情報は、長さがページサイズの倍数であるアドレスと長さとして渡されます。

6

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]); 
} 
関連する問題