# brk(2)

    NAME
         brk, sbrk - change data segment size

    SYNOPSIS
         #include <unistd.h>

         int brk(char *addr)

         char *sbrk(int incr)

    DESCRIPTION
         Brk sets the system's idea of the lowest data segment location  not  used
         by  the  program (called the break) to addr.  Locations greater than addr
         and below the stack pointer are not in the address space  and  will  thus
         cause a memory violation if accessed.

         In the alternate  function  sbrk,  incr  more  bytes  are  added  to  the
         program's  data  space  and  a  pointer  to  the start of the new area is
         returned.

         When a program begins execution via  execve  the  break  is  set  at  the
         highest   location  defined  by  the  program  and  data  storage  areas.
         Ordinarily, therefore, only programs with growing data areas need to  use
         sbrk.

    RETURN VALUE
         The address of the new break is returned  if  brk  succeeds;  -1  if  the
         program  requests  more memory than the system limit.  Sbrk returns -1 if
         the break could not be set.

    ERRORS
         Sbrk will fail and no additional memory will be allocated if one  of  the
         following are true:

         [ENOMEM]       The maximum possible size of a data  segment  (as  set  by
                        chmem(1)) was exceeded.

         [ENOMEM]       Insufficient virtual memory space existed to  support  the
                        expansion.  (Minix-vmd)

    SEE ALSO
         chmem(1), execve(2), malloc(3), end(3).

    NOTES
         Minix-vmd rounds a small data segment limit up to 3 megabytes.

    BUGS
         Setting the break may fail due to a  temporary  lack  of  virtual  memory
         under  Minix-vmd.   It is not possible to distinguish this from a failure
         caused by exceeding the maximum size of the data segment.