2012-08-22 26 views
11

Ich frage mich, warum sollte die Größe des zugeordneten Speichers ein Parameter übergeben, da es nicht mehr als eine Zuordnung von der gleichen Adresse (könnte sie?), Warum nicht Linux Kernel beide Startadresse, Länge zusammen, aber lassen Sie Userspace Programm erinnern sie.Warum benötigt munmap eine Länge als Parameter?

Ich meine, warum sollte es nicht sein, verwenden Sie einfach die Startadresse als Primärschlüssel, um den Informationsbaum zu speichern.

Antwort

9

Man kann map, sagen wir, 5 Seiten und später unmap einer von ihnen. Und Informationen darüber, welche Seiten nicht zugeordnet werden sollen, werden als Adresse und Länge übergeben, wobei die Länge ein Vielfaches der Seitengröße ist.

6

Sie können munmap einen Teilbereich der Speicheradressen, die Sie zuvor zugeordnet haben. Zum Beispiel:

#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]); 
} 
Verwandte Themen