2012-08-22 83 views
11

我在想,爲什麼映射內存的大小是一個參數傳入的,因爲從同一個地址開始的映射不能多於一個映射(可​​以嗎?),爲什麼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]); 
} 
相關問題