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

  man pages->Linux man pages -> mremap (2)              
Title
Content
Arch
Section
 

MREMAP(2)

Contents


NAME    [Toc]    [Back]

       mremap - re-map a virtual memory address

SYNOPSIS    [Toc]    [Back]

       #include <unistd.h>
       #include <sys/mman.h>

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

DESCRIPTION    [Toc]    [Back]

       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.

       The flags argument is a bitmap of flags.

       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	violation.


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

FLAGS    [Toc]    [Back]

       MREMAP_MAYMOVE
	      indicates  if  the  operation should fail, or change the virtual
	      address if the resize cannot be  done  at  the  current  virtual
	      address.

RETURN VALUE    [Toc]    [Back]

       On success mremap returns a pointer to the new virtual memory area.  On
       error, -1 is returned, and errno is set appropriately.

ERRORS    [Toc]    [Back]

       EINVAL An invalid argument was given. Most likely old_address  was  not
	      page aligned.

       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 mappings
 that cover the whole address space	requested,  but  those
	      mappings are of different types.

       EAGAIN The memory segment is locked and cannot be re-mapped.

       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.

CONFORMING TO    [Toc]    [Back]

       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    [Toc]    [Back]

      
      
       getpagesize(2), realloc(3), malloc(3), brk(2), sbrk(2), mmap(2)

       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 1.3.87			  1996-04-12			     MREMAP(2)
[ Back ]
 Similar pages
Name OS Title
vm_map FreeBSD virtual address space portion of virtual memory subsystem
mlockall HP-UX lock a process virtual address space in memory
pmap_mincore FreeBSD determine if a virtual address is resident in physical memory
mlock HP-UX lock a segment of the process virtual address space in memory
pmap_map FreeBSD map a physical memory range into kernel virtual address (KVA) space
KSEG_TO_PHYS Tru64 General: Converts a kernel-unmapped virtual address to a physical address
svatophys Tru64 General: Converts a system virtual address to a physical address
copy_to_phys Tru64 General: Copies data from a virtual address to a physical address
vtop Tru64 General: Converts any virtual address to a physical address
pmap_extract FreeBSD map a virtual address to a physical page
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service