Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OpenBSD-5.7)
Apropos / Subsearch:
optional field

BRK(2)                      BSD System Calls Manual                     BRK(2)

     brk, sbrk -- change data segment size

     #include <&lt;unistd.h>&gt;

     brk(void *addr);

     void *
     sbrk(int incr);

     The brk() and sbrk() functions are historical curiosities left over from
     earlier days before the advent of virtual memory management.  The brk()
     function sets the break or lowest address of a process's data segment
     (uninitialized data) to addr (immediately above bss).  Data addressing is
     restricted between addr and the lowest stack pointer to the stack seg-
     ment.  Memory is allocated by brk() in page size pieces; if addr is not
     evenly divisible by the system page size, it is increased to the next
     page boundary.

     The current value of the program break is reliably returned by
     ``sbrk(0)'' (see also end(3)).  The getrlimit(2) system call may be used
     to determine the maximum permissible size of the data segment; it will
     not be possible to set the break beyond the rlim_max value returned from
     a call to getrlimit(2), e.g., ``etext + rlp->rlim_max'' (see end(3) for
     the definition of etext).

     The brk() function returns the value 0 if successful; otherwise the
     value -1 is returned and the global variable errno is set to indicate the

     The sbrk() function returns a pointer to the base of the new storage if
     successful; otherwise -1 with errno set to indicate why the allocation

     sbrk() will fail and no additional memory will be allocated if one of the
     following are true:

     [ENOMEM]           The limit, as set by setrlimit(2), was exceeded.

     [ENOMEM]           The maximum possible size of a data segment (compiled
                        into the system) was exceeded.

     [ENOMEM]           Insufficient space existed in the swap area to support
                        the expansion.

     execve(2), getrlimit(2), mmap(2), end(3), malloc(3)

     A brk() function call appeared in Version 7 AT&T UNIX.

     Setting the break may fail due to a temporary lack of swap space.  It is
     not possible to distinguish this from a failure caused by exceeding the
     maximum size of the data segment without consulting getrlimit(2).

BSD                            December 10, 2014                           BSD