Why does munmap needs a length as parameter?

北战南征 提交于 2019-12-22 03:19:27

问题


I was wondering, why should the size of mapped memory being one parameter passed in, since there couldn't more more than one mapping starting from same address (could they ?), why won't linux kernel record both start address, length together, but let userspace program remember them.

I mean, why wouldn't it be, just use the start address as primary key to store the information tree.


回答1:


One can map, say, 5 pages and later unmap one of them. And information about what pages to unmap is passed as address and length where the length is a multiple of page size.




回答2:


You can munmap a subrange of memory addresses that you have previously mapped. For example:

#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]);
}


来源:https://stackoverflow.com/questions/12076308/why-does-munmap-needs-a-length-as-parameter

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!