66 lines
2.0 KiB
Plaintext
66 lines
2.0 KiB
Plaintext
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|