onemasse
onemasse

Reputation: 6584

mmap and munmap behaviour

The Open Group standard says that munmap should be called with a page aligned address, but there doesn't seem to be any requirement that mmap should be returning a page aligned address. Is this something you need to handle when you're writing portable code?

Upvotes: 5

Views: 3000

Answers (4)

Per Johansson
Per Johansson

Reputation: 6877

mmap will only map whole pages, and can thus only return a page boundary. It's in the short description:

mmap - map pages of memory

(emphasis mine)

Upvotes: 2

onemasse
onemasse

Reputation: 6584

If I understand it correctly, if MAP_FIXED is not specified, the behavior of mmap is implementation dependent. So the only portable way of using mmap is with MAP_FIXED, which means you have to provide an address that is page aligned. Otherwise you'll receive EINVAL.

Upvotes: -1

Foo Bah
Foo Bah

Reputation: 26251

mmap documentation does mention this requirement, although in an off-handed manner. on my mac, for example:

     [EINVAL]           The offset argument was not page-aligned based on the
                        page size as returned by getpagesize(3).

http://pubs.opengroup.org/onlinepubs/009695399/functions/mmap.html also says

[EINVAL] The addr argument (if MAP_FIXED was specified) or off is not a multiple of the page size as returned by sysconf(), or is considered invalid by the implementation.

Upvotes: 1

Alexey Frunze
Alexey Frunze

Reputation: 62048

I think it's the most natural arrangement (that is, when both the physical and virtual addresses have the same page granularity and alignment). The whole purpose of page translation is to break the virtual address space into spans and independently map them onto blocks of physical memory (pages), with 1 span covering exactly 1 block (page). Even with pages of mixed sizes, the alignment is naturally preserved (e.g. regular page=4KB and large page=2GB/4GB on x86/64; some illustrations).

Upvotes: 0

Related Questions