Data on the stacks is often first accessed by name then manipulated
efficiently by using a pointer. By convention, a stack pointer is
a variable with a name starting with a small "p
". It is declared as of type _stack_point_
, for example:
_stack_point_ pVAR
_stack_point_
is a
pre-processor macro that is currently equivalent to INTEGER
but allows future extensions for long addresses. It can be accessed
in any Fortran routine that contains the statement:
#include "stack_point.h"
before the macro is first used.
Pointers are returned by routines that create new data areas
(MAKDAT
) or find existing data areas (LOCDAT
). In each the caller specifies a name for the data,
for example, MY_VAR
and receives a pointer
in return, for example, pMY_VAR
.
It is recommended that stack pointers are used locally within a routine where they are obtained; there is a clear distinction between routines that use pointers and those that do not. These stack points should not be stored for future calls because it is not guaranteed that the referenced item will remain in memory at the same location.
It is common practice to pass a stack location, for example, RZ(pVAR)
, as an argument down to another subroutine that
can manipulate this data as an ordinary Fortran variable or array.
For example:
CALL MY_SUB( RZ(pMY_ARRAY), LEN_MY_ARRAY) .... .... SUBROUTINE MY_SUB( A, N ) REAL A(N) DO I = 1, N A(I) = 0.0 END DO END