BRK(2) BSD Programmer's Manual BRK(2)
NAME
brk, sbrk - change data segment size
SYNOPSIS
#include <sys/types.h>
char
*brk(const char *addr)
char *
*sbrk(int incr)
DESCRIPTION
The brk and sbrk functions are historical curiosities left over from ear-
lier days before the advent of virtual memory management. The brk()
function sets the break or lowest address of a process's data segment
(unilitialized 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 rlimmax value returned from
a call to getrlimit, e.g. ``qetext + rlp->rlim_max.'' (see end(3) for
the definition of etext).
RETURN VALUES
Brk returns 0 if successful; -1 if the process requests more memory than
than allowed by the system limit. The sbrk function returns 0 if suc-
cessful, otherwise the error EOPNOTSUPP is returned.
SEE ALSO
execve(2), getrlimit(2), malloc(3), end(3)
BUGS
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.
HISTORY
A brk function call appeared in Version 7 AT&T UNIX.
4th Berkeley Distribution March 26, 1993 1