




Command:   chmem - change memory allocation
Syntax:    chmem [+] [-] [=] amount file
Flags:     (none)
Examples:  chmem =50000 a.out       # Give a.out 50K of stack space
           chmem -4000 a.out        # Reduce the  stack  space  by  4000
                                      bytes
           chmem +1000 file1        # Increase each stack by 1000 bytes

     When a program is loaded into memory, it is allocated enough memory
for  the  text  and data+bss segments, plus an area for the stack.  Data
segment growth using malloc, brk, or sbrk eats up stack space  from  the
low  end.  The amount of stack space to allocate is derived from a field
in the executable program's file header.  If the combined stack and data
segment  growth  exceeds  the stack space allocated, the program will be
terminated.

     It is  therefore  important  to  set  the  amount  of  stack  space
carefully.   If  too  little is provided, the program may crash.  If too
much is provided, memory will be wasted, and fewer programs will be able
to  fit  in memory and run simultaneously.  MINIX does not swap, so that
when memory is  full,  subsequent  attempts  to  fork  will  fail.   The
compiler  sets  the  stack  space to the largest possible value (for the
Intel CPUs, 64K - text - data).  For many programs, this  value  is  far
too large.  Nonrecursive programs that do not call brk, sbrk, or malloc,
and do not have any local arrays usually do not need  more  than  8K  of
stack space.

     The chmem command changes  the  value  of  the  header  field  that
determines  the  stack  allocation, and thus indirectly the total memory
required to run the program.  The = option sets  the  stack  size  to  a
specific  value; the + and - options increment and decrement the current
value by the indicated amount.  The old and new stack sizes are printed.


























                                                                        

