Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么munmap需要长度作为参数?_Linux_Kernel_Mmap - Fatal编程技术网

Linux 为什么munmap需要长度作为参数?

Linux 为什么munmap需要长度作为参数?,linux,kernel,mmap,Linux,Kernel,Mmap,我想知道,为什么映射内存的大小应该是传入的一个参数,因为从同一地址开始的映射不能超过一个(可以吗?),为什么linux内核不一起记录起始地址和长度,但让用户空间程序记住它们 我的意思是,为什么不使用起始地址作为主键来存储信息树。一个人可以映射,比如说,5页,然后取消映射其中一页。以及有关要取消映射的页面的信息将作为地址和长度传递,其中长度是页面大小的倍数。您可以munmap以前映射的内存地址子范围。例如: #include <stdio.h> #include <sys/mma

我想知道,为什么映射内存的大小应该是传入的一个参数,因为从同一地址开始的映射不能超过一个(可以吗?),为什么linux内核不一起记录起始地址和长度,但让用户空间程序记住它们


我的意思是,为什么不使用起始地址作为主键来存储信息树。

一个人可以
映射
,比如说,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]);
}