BRK(2) System Calls Manual BRK(2)
brk, sbrk - change data segment size
brk() sets the system's idea of the lowest data segment location not
used by the program (called the break) to addr (rounded up to the next
multiple of the system's page size).
In the alternate function sbrk(), incr more bytes are added to the pro-
gram's data space and a pointer to the start of the new area is
When a program begins execution using execve() the break is set at the
highest location defined by the program and data storage areas.
The getrlimit(2) system call may be used to determine the maximum per-
missible 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(),
that is to say, "etext + rlim.rlim_max." (See end(3) for the defini-
tion of etext().)
0 on success.
-1 on failure and sets errno to indicate the error.
sbrk() returns the old break value on success. On failure, it returns
(caddr_t) -1 and sets errno to indicate the error.
brk() and sbrk() will fail and no additional memory will be allocated
if one of the following occurs:
ENOMEM The data segment size limit, as set by setrlimit() (see
getrlimit(2)), would be exceeded.
The maximum possible size of a data segment (compiled
into the system) would be exceeded.
Insufficient space exists in the swap area to support
Out of address space; the new break value would extend
into an area of the address space defined by some previ-
ously established mapping (see mmap(2)).
execve(2V), mmap(2), getrlimit(2), malloc(3V), end(3)
Programs combining the brk() and sbrk() system calls and malloc() will
not work. Many library routines use malloc() internally, so use brk()
and sbrk() only when you know that malloc() definitely will not be used
by any library routine.
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().
21 January 1990 BRK(2)