Skip site navigation (1)Skip section navigation (2)

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
MADVISE(2)		  FreeBSD System Calls Manual		    MADVISE(2)

NAME
     madvise --	give advice about use of memory

LIBRARY
     Standard C	Library	(libc, -lc)

SYNOPSIS
     #include <sys/types.h>
     #include <sys/mman.h>

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

DESCRIPTION
     The madvise() system call allows a	process	that has knowledge of its mem-
     ory behavior to describe it to the	system.	 The known behaviors are given
     in	<sys/mman.h>:

     #define MADV_NORMAL     0 /* no further special treatment */
     #define MADV_RANDOM     1 /* expect random	page references	*/
     #define MADV_SEQUENTIAL 2 /* expect sequential references */
     #define MADV_WILLNEED   3 /* will need these pages	*/
     #define MADV_DONTNEED   4 /* don't	need these pages */
     #define MADV_FREE	     5 /* data is now unimportant */
     #define MADV_NOSYNC     6 /* no explicit commit to	physical backing store */
     #define MADV_AUTOSYNC   7 /* default commit method	to physical backing store */
     #define MADV_NOCORE     8 /* do not include these pages in	a core file */
     #define MADV_CORE	     9 /* revert to including pages in a core file */

     MADV_NORMAL      Tells the	system to revert to the	default	paging behav-
		      ior.

     MADV_RANDOM      Is a hint	that pages will	be accessed randomly, and
		      prefetching is likely not	advantageous.

     MADV_SEQUENTIAL  Causes the VM system to depress the priority of pages
		      immediately preceding a given page when it is faulted
		      in.

     MADV_WILLNEED    Causes 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.
		      Additionally, the	pages that are already in memory will
		      be immediately mapped into the process, thereby elimi-
		      nating unnecessary overhead of going through the entire
		      process of faulting the pages in.	 This WILL NOT fault
		      pages in from backing store, but quickly map the pages
		      already in memory	into the calling process.

     MADV_DONTNEED    Allows the VM system to decrease the in-memory priority
		      of pages in the specified	range.	Additionally future
		      references to this address range will incur a page
		      fault.

     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.  This is an efficient way	of
		      allowing malloc(3) to free pages anywhere	in the address
		      space, while keeping the address space valid.  The next
		      time that	the page is referenced,	the page might be
		      demand zeroed, or	might contain the data that was	there
		      before the MADV_FREE call.  References made to that
		      address space range will not make	the VM system page the
		      information back in from backing store until the page is
		      modified again.

     MADV_NOSYNC      Request that the system not flush	the data associated
		      with this	map to physical	backing	store unless it	needs
		      to.  Typically this prevents the filesystem update dae-
		      mon from gratuitously writing pages dirtied by the VM
		      system to	physical disk.	Note that VM/filesystem
		      coherency	is always maintained, this feature simply
		      ensures that the mapped data is only flush when it needs
		      to be, usually by	the system pager.

		      This feature is typically	used when you want to use a
		      file-backed shared memory	area to	communicate between
		      processes	(IPC) and do not particularly need the data
		      being stored in that area	to be physically written to
		      disk.  With this feature you get the equivalent perfor-
		      mance with mmap that you would expect to get with	SysV
		      shared memory calls, but in a more controllable and less
		      restrictive manner.  However, note that this feature is
		      not portable across UNIX platforms (though some may do
		      the right	thing by default).  For	more information see
		      the MAP_NOSYNC section of	mmap(2)

     MADV_AUTOSYNC    Undoes the effects of MADV_NOSYNC	for any	future pages
		      dirtied within the address range.	 The effect on pages
		      already dirtied is indeterminate - they may or may not
		      be reverted.  You	can guarentee reversion	by using the
		      msync(2) or fsync(2) system calls.

     MADV_NOCORE      Region is	not included in	a core file.

     MADV_CORE	      Include region in	a core file.

RETURN VALUES
     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.

ERRORS
     The madvise() function will fail if:

     [EINVAL]		The virtual address range specified by the addr	and
			len arguments is not valid.

SEE ALSO
     mincore(2), mprotect(2), msync(2),	munmap(2)

HISTORY
     The madvise() function first appeared in 4.4BSD.

FreeBSD	10.1			 July 19, 1996			  FreeBSD 10.1

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | SEE ALSO | HISTORY

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=madvise&sektion=2&manpath=FreeBSD+4.7-RELEASE>

home | help