MADVISE(2) System Calls Manual MADVISE(2)
madvise -- give advice about use of memory
Standard C Library (libc, -lc)
madvise(void *addr, size_t len, int behav);
posix_madvise(void *addr, size_t len, int advice);
The madvise() system call allows a process that has knowledge of its
memory behavior to describe it to the system. The posix_madvise()
interface is identical and is provided for standards conformance.
The known behaviors are:
MADV_NORMAL Tells the system to revert to the default paging
MADV_RANDOM Is a hint that pages will be accessed randomly, and
prefetching is likely not advantageous.
MADV_SEQUENTIAL Is a hint that pages will be accessed sequentially, from
the lower address to higher address. It might cause the
VM system to depress the priority of pages immediately
preceding a given page when it is faulted in.
MADV_WILLNEED Is a hint that pages will be accessed in the near
future. It might cause the VM system to make pages that
are in a given virtual address range to temporarily have
higher priority, and if they are in memory, decrease the
likelihood of them being freed. It might immediately
map the pages that are already in memory into the
process, thereby eliminating unnecessary overhead of
going through the entire process of faulting the pages
in. It might or might not fault pages in from backing
MADV_DONTNEED Is a hint that pages will not be accessed in the near
future. It might allow the VM system to decrease the
in-memory priority of pages in the specified range.
MADV_FREE Gives the VM system the freedom to free pages, and tells
the system that information in the specified page range
is no longer important.
Portable programs that call the posix_madvise() interface should use the
aliases POSIX_MADV_NORMAL, POSIX_MADV_SEQUENTIAL, POSIX_MADV_RANDOM,
POSIX_MADV_WILLNEED, and POSIX_MADV_DONTNEED rather than the flags
Upon successful completion, a value of 0 is returned. Otherwise, a value
of -1 is returned and errno is set to indicate the error.
madvise() will fail if:
[EINVAL] Invalid parameters were provided.
mincore(2), mprotect(2), msync(2), munmap(2), posix_fadvise(2)
The posix_madvise() system call is expected to conform to the IEEE Std
1003.1-2001 (``POSIX.1'') standard.
The madvise system call first appeared in 4.4BSD, but until NetBSD 1.5 it
did not perform any of the requests on, or change any behavior of the
address range given. The posix_madvise() was invented in NetBSD 5.0.
NetBSD 6.1.5 March 29, 2011 NetBSD 6.1.5