daisy
daisy

Reputation: 23501

Why does munmap needs a length as parameter?

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.

Upvotes: 12

Views: 9780

Answers (2)

user1202136
user1202136

Reputation: 11567

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

Upvotes: 9

user405725
user405725

Reputation:

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.

Upvotes: 11

Related Questions