---
name: "munmap"
section: "2"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/munmap"
---

# munmap(2)

remove a mapping

## NAME

**munmap** – remove a mapping

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*int*\

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

## DESCRIPTION

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

## RETURN VALUES

The **munmap()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

The **munmap**() system call will fail if:

- \[EINVAL\]

  The *len* argument was zero, or some part of the region being unmapped is outside the valid address range for a process.

## SEE ALSO

[madvise(2)](/madvise/2.md), [mincore(2)](/mincore/2.md), [mmap(2)](/mmap/2.md), [mprotect(2)](/mprotect/2.md), [msync(2)](/msync/2.md), [getpagesize(3)](/getpagesize/3.md)

## STANDARDS

The **munmap**() system call conforms to IEEE Std 1003.1-2024 (“POSIX.1”). Portable programs should ensure that *addr* is a multiple of the page size as returned by [sysconf(3)](/sysconf/3.md).

## HISTORY

The **munmap**() system call first appeared in 4.4BSD.
