BRK(2) BRK(2) NAME brk, sbrk - change data segment size SYNOPSIS #include char *brk(addr) char *addr; char *sbrk(incr) int incr; DESCRIPTION _B_r_k sets the system’s idea of the lowest data segment location not used by the program (called the break) to _a_d_d_r (rounded up to the next mul‐ tiple of the system’s page size). Locations greater than _a_d_d_r and below the stack pointer are not in the address space and will thus cause a memory violation if accessed. In the alternate function _s_b_r_k, _i_n_c_r more bytes are added to the pro‐ gram’s data space and a pointer to the start of the new area is returned. When a program begins execution via _e_x_e_c_v_e the break is set at the highest location defined by the program and data storage areas. Ordi‐ narily, therefore, only programs with growing data areas need to use _s_b_r_k. The _g_e_t_r_l_i_m_i_t(2) system call may be used to determine the maximum per‐ missible size of the _d_a_t_a segment; it will not be possible to set the break beyond the _r_l_i_m__m_a_x value returned from a call to _g_e_t_r_l_i_m_i_t, e.g. “etext + rlp→rlim_max.” (see _e_n_d(3) for the definition of _e_t_e_x_t). RETURN VALUE Zero is returned if the _b_r_k could be set; -1 if the program requests more memory than the system limit. _S_b_r_k returns -1 if the break could not be set. ERRORS _S_b_r_k will fail and no additional memory will be allocated if one of the following are true: [ENOMEM] The limit, as set by _s_e_t_r_l_i_m_i_t(2), was exceeded. [ENOMEM] The maximum possible size of a data segment (compiled into the system) was exceeded. [ENOMEM] Insufficient space existed in the swap area to support the expansion. 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 _g_e_t_r_l_i_m_i_t. 4th Berkeley Distribution May 22, 1986 BRK(2)