brk, sbrk - change data segment size
brk(const char *addr);
The brk() and sbrk() functions are historical curiosities
left over from
earlier days before the advent of virtual memory management.
function sets the break or lowest address of a process's data segment
(uninitialized data) to addr (immediately above bss). Data
restricted between addr and the lowest stack pointer to the
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 current value of the program break is reliably returned
``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
a call to getrlimit(2), e.g., ``etext + rlp->rlim_max''.
(see end(3) for
the definition of etext).
brk() returns a pointer to the new end of memory if successful; otherwise
-1 with errno set to indicate why the allocation failed.
function returns a pointer to the base of the new storage if
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
the system) was exceeded.
[ENOMEM] Insufficient space existed in the swap area to
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
maximum size of the data segment without consulting getrlimit(2).
OpenBSD 3.6 December 11, 1993
[ Back ]