*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Linux man pages -> madvise (2)              



NAME    [Toc]    [Back]

       madvise - give advice about use of memory

SYNOPSIS    [Toc]    [Back]

       #include <sys/mman.h>

       int madvise(void *start, size_t length, int advice );

DESCRIPTION    [Toc]    [Back]

       The  madvise  system call advises the kernel about how to handle paging
       input/output in the address range beginning at address start  and  with
       size  length  bytes. It allows an application to tell the kernel how it
       expects to use some mapped or shared memory areas, so that  the	kernel
       can  choose  appropriate  read-ahead and caching techniques.  This call
       does not influence the semantics of the application, but may  influence
       its performance. The kernel is free to ignore the advice.

       The advice is indicated in the advice parameter which can be

       MADV_NORMAL    [Toc]    [Back]
	      No special treatment. This is the default.

       MADV_RANDOM    [Toc]    [Back]
	      Expect  page references in random order.	(Hence, read ahead may
	      be less useful than normally.)

       MADV_SEQUENTIAL    [Toc]    [Back]
	      Expect page references in sequential order.   (Hence,  pages  in
	      the given range can be aggressively read ahead, and may be freed
	      soon after they are accessed.)

       MADV_WILLNEED    [Toc]    [Back]
	      Expect access in the near future.  (Hence, it might  be  a  good
	      idea to read some pages ahead.)

       MADV_DONTNEED    [Toc]    [Back]
	      Do  not  expect access in the near future.  (For the time being,
	      the application is finished with the given range, so the	kernel
	      can free resources associated with it.)

RETURN VALUE    [Toc]    [Back]

       On  success  madvise returns zero. On error, it returns -1 and errno is
       set appropiately.

ERRORS    [Toc]    [Back]

       EINVAL the value len is negative, start is not page-aligned, advice  is
	      not  a  valid value, or the application is attempting to release
	      locked or shared pages (with MADV_DONTNEED).

       ENOMEM addresses in the specified range are not	currently  mapped,  or
	      are outside the address space of the process.

       ENOMEM (for MADV_WILLNEED) Not enough memory - paging in failed.

       EIO    (for  MADV_WILLNEED)  Paging  in	this  area  would  exceed  the
	      process's maximum resident set size.

       EBADF  the map exists, but the area maps something that isn't a file.

       EAGAIN a kernel resource was temporarily unavailable.

LINUX NOTES    [Toc]    [Back]

       The current Linux implementation (2.4.0) views this system call more as
       a  command  than as advice and hence may return an error when it cannot
       do what it usually would do in response to this advice. (See the ERRORS
       description above.)  This is nonstandard behaviour.

       The  Linux  implementation  requires  that  the	address start be pagealigned,
 and allows length to be zero. If there are some parts  of  the
       specified  address range that are not mapped, the Linux version of mad-
       vise ignores them and applies the call to the rest (but returns	ENOMEM
       from the system call, as it should).

HISTORY    [Toc]    [Back]

       The madvise function first appeared in 4.4BSD.

CONFORMING TO    [Toc]    [Back]

       POSIX.1b (POSIX.4).  The Austin draft describes posix_madvise with constants
  POSIX_MADV_NORMAL,  etc.,  with	a  behaviour  close  to   that
       described here. There is a similar posix_fadvise for file access.

SEE ALSO    [Toc]    [Back]

       getrlimit(2), mmap(2), mincore(2), mprotect(2), msync(2), munmap(2)

Linux 2.4.5			  2001-06-10			    MADVISE(2)
[ Back ]
 Similar pages
Name OS Title
madvise IRIX give advice about handling memory
vm_map_madvise FreeBSD apply advice about use of memory to map entries
head HP-UX give first few lines
head IRIX give first few lines
addprivuser IRIX give a user all system administration privileges
krb5-config FreeBSD give information on how to link code against Heimdal libraries
mmap FreeBSD allocate memory, or map files or devices into memory
mem OpenBSD memory files and memory controller
kmem OpenBSD memory files and memory controller
shm_open FreeBSD open or create a shared memory object shm_unlink -- remove a shared memory object
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service