我在想,爲什麼映射內存的大小是一個參數傳入的,因爲從同一個地址開始的映射不能多於一個映射(可以嗎?),爲什麼linux內核不能同時記錄起始地址,長度一起,但讓用戶空間程序記住它們。爲什麼munmap需要長度作爲參數?
我的意思是,爲什麼不這樣做呢,只是使用起始地址作爲主鍵來存儲信息樹。
我在想,爲什麼映射內存的大小是一個參數傳入的,因爲從同一個地址開始的映射不能多於一個映射(可以嗎?),爲什麼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]);
}