Linux 为什么munmap需要长度作为参数?
我想知道,为什么映射内存的大小应该是传入的一个参数,因为从同一地址开始的映射不能超过一个(可以吗?),为什么linux内核不一起记录起始地址和长度,但让用户空间程序记住它们Linux 为什么munmap需要长度作为参数?,linux,kernel,mmap,Linux,Kernel,Mmap,我想知道,为什么映射内存的大小应该是传入的一个参数,因为从同一地址开始的映射不能超过一个(可以吗?),为什么linux内核不一起记录起始地址和长度,但让用户空间程序记住它们 我的意思是,为什么不使用起始地址作为主键来存储信息树。一个人可以映射,比如说,5页,然后取消映射其中一页。以及有关要取消映射的页面的信息将作为地址和长度传递,其中长度是页面大小的倍数。您可以munmap以前映射的内存地址子范围。例如: #include <stdio.h> #include <sys/mma
我的意思是,为什么不使用起始地址作为主键来存储信息树。一个人可以
映射
,比如说,5页,然后取消映射
其中一页。以及有关要取消映射的页面的信息将作为地址和长度传递,其中长度是页面大小的倍数。您可以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]);
}
#包括
#包括
#包括
int main()
{
int pagesize=sysconf(_SC_pagesize);
char*addr=mmap(NULL,4*pagesize,PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS,-1,0);
地址[pagesize]=“X”;
munmap(地址、页面大小);
printf(“%c\n”,地址[pagesize]);
}