---
name: "munmap"
section: "2"
platform: "macos"
package: "xnu"
version: "12377.121.6"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/munmap"
---

# munmap(2)

remove a mapping

## NAME

**munmap** – remove a mapping

## SYNOPSIS

**#include \<sys/mman.h\>**

*int*\

**munmap**(*void \*addr*, *size\_t len*);

## DESCRIPTION

The **munmap**() system call deletes the mappings for the specified address range, causing further references to addresses within the range to generate invalid memory references.

## DIRTY PAGE HANDLING

How **munmap**() handles a dirty page, depends on what type of memory is being unmapped:

- \[Anonymous\]

  If the memory is anonymous memory and if the last reference is going away, then the contents are discarded by definition of anonymous memory.

- \[System V Shared\]

  If the memory mapping was created using System V shared memory, then  the contents persist until the System V memory region is destroyed or  the system is rebooted.

- \[File mapping\]

  If the mapping maps data from a file (MAP\_SHARED), then the memory will  eventually be written back to disk if it's dirty.  This will happen  automatically at some point in the future (implementation dependent). Note: to force the memory to be written back to the disk, use  [msync(2)](/msync/2.md).

If there are still other references to the memory when the munmap is  done, then nothing is done to the memory itself and it may be swapped  out if need be. The memory will continue to persist until the last  reference goes away (except for System V shared memory in which case,  see above).

## RETURN VALUES

Upon successful completion, **munmap** returns zero. Otherwise, a value of -1 is returned and *errno* is set to indicate the error.

## ERRORS

**munmap**() will fail if:

- \[EINVAL\]

  The *addr* parameter was not page aligned (i.e., a multiple of the page size).

- \[EINVAL\]

  The *len* parameter was negative or zero.

- \[EINVAL\]

  Some part of the region being unmapped is not part of the currently valid address space.

## LEGACY SYNOPSIS

**#include \<sys/types.h\>** **#include \<sys/mman.h\>**

The include file ⟨sys/types.h⟩ is necessary.

*int*\
 **munmap**(*caddr\_t addr*, *size\_t len*);

The type of *addr* has changed.

## SEE ALSO

[getpagesize(3)](/getpagesize/3.md), [msync(2)](/msync/2.md), [munmap(2)](/munmap/2.md), [mprotect(2)](/mprotect/2.md), [madvise(2)](/madvise/2.md), [mincore(2)](/mincore/2.md), [compat(5)](/compat/5.md)

## HISTORY

The **munmap**() function first appeared in 4.4BSD.
