OpenBSD manual page server

Manual Page Search Parameters

MADVISE(2) System Calls Manual MADVISE(2)

madvise, posix_madvisegive advice about use of memory

#include <sys/mman.h>

int
madvise(void *addr, size_t len, int behav);

int
posix_madvise(void *addr, size_t len, int behav);

The () system call allows a process that has knowledge of its memory behavior to describe it to the system. The posix_madvise() interface has the same effect, but returns the error value instead of only setting errno.

The possible behaviors are:

No further special treatment needed.
Expect random page access patterns.
Expect sequential page references.
The pages will be referenced soon.
The pages will not be referenced soon.
Ensure that resources are reserved.
The pages don't contain any useful data and can be recycled.

Portable programs that call the () interface should use the aliases POSIX_MADV_NORMAL, POSIX_MADV_RANDOM, POSIX_MADV_SEQUENTIAL, POSIX_MADV_WILLNEED, and POSIX_MADV_DONTNEED rather than the flags described above.

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

If successful, the posix_madvise() function will return zero. Otherwise an error number will be returned to indicate the error.

madvise() will fail if:

[]
The specified behav argument was invalid.
[]
The addr parameter was not page aligned or addr and size specify a region that would extend beyond the end of the address space.
[]
The addr and len parameters specify a region which contains at least one page marked immutable.

mimmutable(2), minherit(2), mprotect(2), msync(2), munmap(2)

The posix_madvise() system call conforms to IEEE Std 1003.1-2008 (“POSIX.1”).

The EPERM failure conditions described are an extension to this specification.

The madvise() function first appeared in SunOS 4.0 and has been available since OpenBSD 2.7. The posix_madvise() function first appeared in OpenBSD 4.8.

The MADV_WILLNEED behavior is ignored. The MADV_SPACEAVAIL behavior is not implemented and will always fail.

January 21, 2024 OpenBSD-current