mremap man page on CentOS

Man page or keyword search:  
man Server   8420 pages
apropos Keyword Search (all sections)
Output format
CentOS logo
[printable version]

MREMAP(2)		   Linux Programmer's Manual		     MREMAP(2)

NAME
       mremap - re-map a virtual memory address

SYNOPSIS
       #define _GNU_SOURCE
       #include <unistd.h>
       #include <sys/mman.h>

       void * mremap(void *old_address, size_t old_size , size_t new_size, int
       flags);

DESCRIPTION
       mremap() expands (or shrinks) an existing memory	 mapping,  potentially
       moving  it  at  the same time (controlled by the flags argument and the
       available virtual address space).

       old_address is the old address of the virtual  memory  block  that  you
       want  to	 expand	 (or  shrink).	 Note  that old_address has to be page
       aligned. old_size  is  the  old	size  of  the  virtual	memory	block.
       new_size	 is  the  requested size of the virtual memory block after the
       resize.

       In Linux the memory is divided into pages.  A user process has (one or)
       several	linear	virtual	 memory segments.  Each virtual memory segment
       has one or more mappings to real memory	pages  (in  the	 page  table).
       Each  virtual  memory  segment  has its own protection (access rights),
       which may cause a segmentation violation	 if  the  memory  is  accessed
       incorrectly  (e.g., writing to a read-only segment).  Accessing virtual
       memory outside of the segments will also cause  a  segmentation	viola‐
       tion.

       mremap()	 uses  the Linux page table scheme.  mremap() changes the map‐
       ping between virtual addresses and memory pages.	 This can be  used  to
       implement a very efficient realloc().

       The flags bit-mask argument may be 0, or include the following flag:

       MREMAP_MAYMOVE
	      By default, if there is not sufficient space to expand a mapping
	      at its current location, then mremap() fails.  If this  flag  is
	      specified,  then the kernel is permitted to relocate the mapping
	      to a new virtual address, if necessary.  If the mapping is relo‐
	      cated,  then  absolute  pointers	into  the old mapping location
	      become invalid (offsets relative to the starting address of  the
	      mapping should be employed).

       MREMAP_FIXED (since Linux 2.3.31)
	      This  flag  serves  a  similar  purpose to the MAP_FIXED flag of
	      mmap(2).	If this flag is specified,  then  mremap()  accepts  a
	      fifth  argument,	void  *new_address,  which  specifies  a page-
	      aligned address to which the mapping must be moved.  Any	previ‐
	      ous  mapping  at	the address range specified by new_address and
	      new_size	is  unmapped.	If  MREMAP_FIXED  is  specified,  then
	      MREMAP_MAYMOVE must also be specified.

       If  the	memory segment specified by old_address and old_size is locked
       (using mlock() or similar), then this lock is maintained when the  seg‐
       ment is resized and/or relocated.  As a consequence, the amount of mem‐
       ory locked by the process may change.

RETURN VALUE
       On success mremap() returns a pointer to the new virtual	 memory	 area.
       On  error, the value MAP_FAILED (that is, (void *) -1) is returned, and
       errno is set appropriately.

ERRORS
       EAGAIN The caller tried to expand a memory segment that is locked,  but
	      this  was	 not  possible	without	 exceeding  the RLIMIT_MEMLOCK
	      resource limit.

       EFAULT "Segmentation fault." Some address in the range  old_address  to
	      old_address+old_size  is	an  invalid virtual memory address for
	      this process.  You can also get EFAULT even if there exist  map‐
	      pings  that  cover  the whole address space requested, but those
	      mappings are of different types.

       EINVAL An invalid argument was given.  Possible causes are: old_address
	      was  not	page  aligned;	a  value  other than MREMAP_MAYMOVE or
	      MREMAP_FIXED was specified in flags; new_size was zero; new_size
	      or  new_address  was invalid; or the new address range specified
	      by new_address and new_size overlapped  the  old	address	 range
	      specified by old_address and old_size; or MREMAP_FIXED was spec‐
	      ified without also specifying MREMAP_MAYMOVE.

       ENOMEM The memory area  cannot  be  expanded  at	 the  current  virtual
	      address,	and  the MREMAP_MAYMOVE flag is not set in flags.  Or,
	      there is not enough (virtual) memory available.

NOTES
       Prior  to  version  2.4,	 glibc	did  not  expose  the  definition   of
       MREMAP_FIXED,  and  the	prototype  for	mremap() did not allow for the
       new_address argument.

CONFORMING TO
       This call is  Linux-specific,  and  should  not	be  used  in  programs
       intended	 to  be	 portable.   4.2BSD had a (never actually implemented)
       mremap(2) call with completely different semantics.

SEE ALSO
       brk(2), getpagesize(2), getrlimit(2), mlock(2), mmap(2), sbrk(2),  mal‐
       loc(3), realloc(3)

       Your favorite OS text book for more information on paged memory.	 (Mod‐
       ern Operating Systems by Andrew S. Tannenbaum, Inside Linux by  Randolf
       Bentson, The Design of the UNIX Operating System by Maurice J. Bach.)

Linux 2.6.13			  2005-09-13			     MREMAP(2)
[top]

List of man pages available for CentOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net