---
name: "contigmalloc"
section: "9"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/contigmalloc"
---

# contigmalloc(9)

manage contiguous kernel physical memory

## NAME

**contigmalloc**, **contigfree** – manage contiguous kernel physical memory

## SYNOPSIS

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

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

*void \**\

**contigmalloc**(*unsigned long size*, *struct malloc\_type \*type*, *int flags*, *vm\_paddr\_t low*, *vm\_paddr\_t high*, *unsigned long alignment*, *unsigned long boundary*);

*void*\

**contigfree**(*void \*addr*, *unsigned long size*, *struct malloc\_type \*type*);

## DESCRIPTION

The **contigmalloc**() function allocates *size* bytes of contiguous physical memory that is aligned to *alignment* bytes, and which does not cross a boundary of *boundary* bytes. If successful, the allocation will reside between physical addresses *low* and *high*. The returned pointer points to a wired kernel virtual address range of *size* bytes allocated from the kernel virtual address (KVA) map.

The *flags* parameter modifies **contigmalloc**(*Ns*, *'s*) behaviour as follows:

- M\_ZERO

  Causes the allocated physical memory to be zero filled.

Other flags (if present) are ignored.

The **contigfree**() function deallocates memory allocated by a previous call to **contigmalloc**().

## IMPLEMENTATION NOTES

The **contigmalloc**() function does not sleep waiting for memory resources to be freed up, but instead scans available physical memory a small number of times for a suitably sized free address range before giving up. Memory allocation is done on a first-fit basis, starting from the top of the provided address range.

## RETURN VALUES

The **contigmalloc**() function returns a kernel virtual address if allocation succeeds, or NULL otherwise.

## EXAMPLES

```
void *p;
p = contigmalloc(8192, M_DEVBUF, M_ZERO, 0, (1L << 22),
    32 * 1024, 1024 * 1024);
```

Ask for 8192 bytes of zero-filled memory residing between physical address 0 and 4194303 inclusive, aligned to a 32K boundary and not crossing a 1M address boundary.

## DIAGNOSTICS

The **contigmalloc**() function will panic if *size* is zero, or if *alignment* or *boundary* is not a power of two.

## SEE ALSO

[malloc(9)](/malloc/9.md), [memguard(9)](/memguard/9.md)
