# brk

## NAME



           brk, sbrk - change data segment size
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <unistd.h>**
    
           **int brk(void ***_addr_**);**
           **void *sbrk(intptr_t** _increment_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **brk**(), **sbrk**():
               Since glibc 2.19:
                   _DEFAULT_SOURCE
                       || ((_XOPEN_SOURCE >= 500) &&
                           ! (_POSIX_C_SOURCE >= 200112L))
               From glibc 2.12 to glibc 2.19:
                   _BSD_SOURCE || _SVID_SOURCE
                       || ((_XOPEN_SOURCE >= 500) &&
                           ! (_POSIX_C_SOURCE >= 200112L))
               Before glibc 2.12:
                   _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500
    


## DESCRIPTION



           **brk**() and **sbrk**() change the location of the _program break_ , which
           defines the end of the process's data segment (i.e., the program
           break is the first location after the end of the uninitialized
           data segment).  Increasing the program break has the effect of
           allocating memory to the process; decreasing the break deallocates
           memory.
    
           **brk**() sets the end of the data segment to the value specified by
           _addr_ , when that value is reasonable, the system has enough memory,
           and the process does not exceed its maximum data size (see
           setrlimit(2)).
    
           **sbrk**() increments the program's data space by _increment_ bytes.
           Calling **sbrk**() with an _increment_ of 0 can be used to find the
           current location of the program break.
    


## RETURN VALUE



           On success, **brk**() returns zero.  On error, -1 is returned, and
           _errno_ is set to **ENOMEM**.
    
           On success, **sbrk**() returns the previous program break.  (If the
           break was increased, then this value is a pointer to the start of
           the newly allocated memory).  On error, _(void *) -1_ is returned,
           and _errno_ is set to **ENOMEM**.
    


## STANDARDS



           None.
    


## NOTES



           Avoid using **brk**() and **sbrk**(): the malloc(3) memory allocation
           package is the portable and comfortable way of allocating memory.
    
           Various systems use various types for the argument of **sbrk**().
           Common are _int_ , _ssize_t_ , _ptrdiff_t_ , _intptr_t_.
    
       **C library/kernel differences**
           The return value described above for **brk**() is the behavior
           provided by the glibc wrapper function for the Linux **brk**() system
           call.  (On most other implementations, the return value from **brk**()
           is the same; this return value was also specified in SUSv2.)
           However, the actual Linux system call returns the new program
           break on success.  On failure, the system call returns the current
           break.  The glibc wrapper function does some work (i.e., checks
           whether the new break is less than _addr_) to provide the 0 and -1
           return values described above.
    
           On Linux, **sbrk**() is implemented as a library function that uses
           the **brk**() system call, and does some internal bookkeeping so that
           it can return the old break value.
    


* * *