mremap(2) System Calls Manual mremap(2) mremap - (libc -lc) #define _GNU_SOURCE /* feature_test_macros(7) */ #include void *mremap(size_t old_size; void old_address[old_size], size_t old_size, size_t new_size, int flags, ... /* void *new_address */); mremap() ( ) ( flags ). ( ) old_size new_size MREMAP_FIXED ( ). Linux 6.17 old_address old_size . MREMAP_DONTUNMAP. old_size new_size old_size . MREMAP_FIXED MREMAP_DONTUNMAP new_size VMAs . new_size . MREMAP_FIXED old_size . old_address / . old_address . old_size . new_size . new_address MREMAP_FIXED . old_size old_address ( MAP_SHARED mmap(2)) mremap() . new_size new_address MREMAP_FIXED . MREMAP_MAYMOVE. flags 0 : MREMAP_MAYMOVE mremap(). . ( ). MREMAP_FIXED ( Linux 2.3.31) MAP_FIXED mmap(2). mremap() void *new_address . new_address new_size. MREMAP_FIXED MREMAP_MAYMOVE. Linux 6.17 old_size new_size MREMAP_FIXED old_size old_address. . . userfaultfd(2) . MREMAP_DONTUNMAP ( Linux 5.7) MREMAP_MAYMOVE . MREMAP_DONTUNMAP VM_DONTEXPAND VM_PFNMAP. Linux 5.13 MREMAP_DONTUNMAP ( MAP_PRIVATE MAP_ANONYMOUS mmap(2)). old_address old_size . userfaultfd(2) userfaultfd(2). . MREMAP_DONTUNMAP . MREMAP_DONTUNMAP. old_address old_size ( mlock(2) ) / . . mremap() . MAP_FAILED ( (void *) -1) errno . EAGAIN RLIMIT_MEMLOCK. EFAULT old_address old_address+old_size . EFAULT mremap() . EINVAL . : o old_address o MREMAP_MAYMOVE MREMAP_FIXED MREMAP_DONTUNMAP flags o new_size o new_size new_address o new_address new_size old_address old_size o MREMAP_FIXED MREMAP_DONTUNMAP MREMAP_MAYMOVE o MREMAP_DONTUNMAP old_address old_size o MREMAP_DONTUNMAP old_size new_size o old_size old_address ( ) o old_size MREMAP_MAYMOVE. ENOMEM . : o MREMAP_MAYMOVE flags. () . o MREMAP_DONTUNMAP () . . . glibc 2.4 glibc MREMAP_FIXED mremap() new_address. mremap() . realloc(3) . . ( ) . ( ). ( ) (SIGSEGV) ( ). . mremap() mlock(2) mremap() ENOMEM . MREMAP_DONTUNMAP MREMAP_DONTUNMAP : o userfaultfd(2) : MREMAP_DONTUNMAP userfaultfd(2) . o : MREMAP_DONTUNMAP userfaultfd(2) ( ). () PROT_NONE SIGSEGV . 4.14 old_size old_address ( MAP_PRIVATE mmap(2)) mremap() . ( mremap() ). 4.14 mremap() EINVAL . brk(2), getpagesize(2), getrlimit(2), mlock(2), mmap(2), sbrk(2), malloc(3), realloc(3) ( Modern Operating Systems Andrew S. Tanenbaum Inside Linux Randolph Bentson The Design of the UNIX Operating System Maurice J. Bach) # 3 . . : . 6.18 8 2026 mremap(2)