brk(2)



NAME

     brk, sbrk - change data segment size


SYNOPSIS

     #include <unistd.h>

     char *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.