2012-08-22 26 views
11

Tôi đã tự hỏi, tại sao kích thước của bộ nhớ ánh xạ là một tham số được truyền vào, vì không thể có nhiều hơn một ánh xạ bắt đầu từ cùng một địa chỉ (có thể chúng?) chiều dài với nhau, nhưng hãy để chương trình không gian người dùng nhớ chúng.Tại sao munmap cần độ dài là tham số?

Ý tôi là, tại sao không, chỉ sử dụng địa chỉ xuất phát làm khóa chính để lưu trữ cây thông tin.

Trả lời

9

Một người có thể map, giả sử, 5 trang và sau đó là unmap một trong số họ. Và thông tin về những trang để unmap được truyền dưới dạng địa chỉ và độ dài mà độ dài là bội số của kích thước trang.

6

Bạn có thể munmap một vùng địa chỉ bộ nhớ mà bạn đã ánh xạ trước đó. Ví dụ:

#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]); 
} 
Các vấn đề liên quan