brk, sbrk - change data segment space allocation
and are used to change dynamically the amount of space allocated for
the calling process's data segment; see exec(2). The change is made by
resetting the process's break value and allocating the appropriate
amount of space. The break value is the address of the first location
beyond the end of the data segment. The amount of allocated space
increases as the break value increases. The newly allocated space is
set to zero.
sets the break value to endds and changes the allocated space accord‐
adds incr bytes to the break value and changes the allocated space
accordingly. incr can be negative, in which case the amount of allo‐
cated space is decreased.
and fail without making any change in the allocated space if one or
more of the following are true:
[ENOMEM] Such a change would result in more space being allocated
than is allowed by a system-imposed maximum (see
[ENOMEM] Such a change would cause a conflict between addresses
in the data segment and any attached shared memory seg‐
ment (see shmop(2)).
[ENOMEM] Such a change would be impossible as there is insuffi‐
cient swap space available.
[EINVAL] Such a change will result in crossing the boundary to
uninitialized data in the calling process's data seg‐
The pointer returned by is not necessarily word-aligned. Loading or
storing words through this pointer could cause word alignment problems.
Be very careful when using either or in conjunction with calls to the
malloc(3C) library routines. There is only one program data segment
from which all three of these routines allocate and deallocate program
Upon successful completion, returns a value of 0. Otherwise, a value of
−1 is returned and is set to indicate the error.
Upon successful completion, returns the old break value. Otherwise, is
returned and is set to indicate the error. The symbol is defined in the
header No successful return from will return the value
and were developed by AT&T and HP.
SEE ALSOexec(2), shmop(2), ulimit(2), end(3C), malloc(3C).