Change the amount of space allocated for the calling process's data segment
#include <unistd.h> int brk( void* endds );
Use the -l c option to qcc to link against this library. This library is usually included automatically.
|This function is in libc.a, but not in libc.so (in order to save space).|
The brk() function is used to change dynamically the amount of space allocated for the calling process's data segment (see the exec* functions).
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. Newly allocated space is set to zero. If, however, the same memory space is reallocated to the same process, its contents are undefined.
When a program begins execution using execve(), the break is set at the highest location defined by the program and data storage areas.
You can call getrlimit() to determine the maximum permissible size of the data segment; it isn't possible to set the break beyond the rlim_max value returned from getrlimit(), i.e:
end + rlim.rlim_max
Don't use brk() and sbrk() with any other memory functions (such as malloc(), mmap(), and free()). The brk() function assumes that the heap is contiguous; in Neutrino, memory is returned to the system by the heap, causing the heap to become sparse. The Neutrino malloc() function is based on mmap(), and not on brk().
The brk() function has been used in specialized cases where no other memory allocation function provided the same capability. Use mmap() instead because it can be used portably with all other memory allocation functions and with any function that uses other allocation functions.
The value of the argument to brk() is rounded up for alignment with eight-byte boundaries.
_btext, _edata, _end, _etext, execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), free(), getrlimit(), malloc(), mmap(), sbrk()