Compile-Time Decisions

Run-Time Information

Unit Activation

Activation Records

Language Issues

Static Storage Allocation

Activation Records for Languages that Support Recursion

Activation Records for Languages that Support Block Structure

Activation Records Whose Size Is Known at Unit Activation

Activation Records with Dynamically Varying Size

Activation Records for Concurrent Units

Storage Allocation for Lisp-like Languages

Storage Allocation for Arrays

12.3.6 Static Storage Allocation

Because FORTRAN typifies the issues for static storage allocation, it will be used as the example here. For FORTRAN and other languages which allow static storage allocation, the amount of storage required to hold each variable is fixed at translation time.

Such languages have no nested procedures or recursion and thus only one instance of each name (the same identifier may be used in different context, however).

In FORTRAN each procedure or function, as well as the main program and a few other program structures not discussed here, may be compiled separately and associated with an activation record that can be entirely allocated by the compiler.

Example 1 shows the skeleton of a FORTRAN program and its storage allocation.

EXAMPLE 1 Static storage example

    Consider the following outline of a FORTRAN program, where statements beginning with C represent comments.

       C Main Program
         ...
         Read (*,X)
         ...
       C Function ...
         FUNCTION ...
         ...
       C Subroutine ...
         SUBOUTINE ...
         ...
       

For each program unit such as the main program, a function or a subroutine (procedure), there is a code segment and an activation record. Figure 1 is a picture of what the run-time system might look like for the program skeleton of Example 1:

Figure 2 shows X's offset within the activation record:

Notice that everything except the beginning of the allocated storage is known at compile-time: the position (offset) of the activation record within the data area and even X's position (offset) within the activation record for its unit. The only decision to be made at run-time (and often made by the system linker) is where to put the entire data structure.

In static storage allocation, variables are also said to be static because their offset in the run-time system structure can be completely determined at compile time.