Go to the first, previous, next, last section, table of contents.
g77
code might fail at runtime (probably with a "segmentation
violation") due to overflowing the stack.
This happens most often on systems with an environment
that provides substantially more heap space (for use
when arbitrarily allocating and freeing memory) than stack
space.
Often this can be cured by
increasing or removing your shell's limit on stack usage, typically
using limit stacksize (in csh
and derivatives) or
ulimit -s (in sh
and derivatives).
Increasing the allowed stack size might, however, require changing some operating system or system configuration parameters.
You might be able to work around the problem by compiling with the `-fno-automatic' option to reduce stack usage, probably at the expense of speed.
See section Maximum Stackable Size, for information on patching
g77
to use different criteria for placing local
non-automatic variables and arrays on the stack.
However, if your program uses large automatic arrays
(for example, has declarations like `REAL A(N)' where
`A' is a local array and `N' is a dummy or
COMMON
variable that can have a large value),
neither use of `-fno-automatic',
nor changing the cut-off point for g77
for using the stack,
will solve the problem by changing the placement of these
large arrays, as they are necessarily automatic.
g77
currently provides no means to specify that
automatic arrays are to be allocated on the heap instead
of the stack.
So, other than increasing the stack size, your best bet is to
change your source code to avoid large automatic arrays.
Methods for doing this currently are outside the scope of
this document.
(Note: If your system puts stack and heap space in the same memory area, such that they are effectively combined, then a stack overflow probably indicates a program that is either simply too large for the system, or buggy.)
Go to the first, previous, next, last section, table of contents.