|
NAMEbrk , sbrk —
change data segment size
LIBRARYStandard C Library (libc, -lc)SYNOPSIS#include <unistd.h>
int
void *
DESCRIPTIONThe
brk () and
sbrk () functions are legacy interfaces from before the
advent of modern virtual memory management. They are deprecated and not
present on the arm64 or riscv architectures. The
mmap(2)
interface should be used to allocate pages instead.The The The NOTESWhile the actual process data segment size maintained by the kernel will only grow or shrink in page sizes, these functions allow setting the break to unaligned values (i.e., it may point to any address inside the last page of the data segment).The current value of the program break may be determined by
calling 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
“etext +
rlim.rlim_max” where the
rlim.rlim_max value is returned from a call to
RETURN VALUESThebrk () function returns the value 0 if
successful; otherwise the value -1 is returned and the global variable
errno is set to indicate the error.
The ERRORSThebrk () and sbrk () functions
will fail if:
SEE ALSOexecve(2), getrlimit(2), mmap(2), end(3), free(3), malloc(3)HISTORYThebrk () function appeared in
Version 7 AT&T UNIX.
FreeBSD 11.0 introduced the arm64 and riscv
architectures which do not support brk () or
sbrk ().
BUGSMixingbrk () or sbrk () with
malloc(3),
free(3), or
similar functions will result in non-portable program behavior.
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).
Visit the GSP FreeBSD Man Page Interface. |