FPT and WinFPT Reference Manual - Command-line Commands

| SimCon Home | Reference Manual Home |


ALIGN OBJECTS IN STRUCTURES

Syntax:

[DO NOT] ALIGN [OBJECTS] [IN] STRUCTURES

Function:

The command ALIGN OBJECTS IN STRUCTURES instructs FPT to compute addresses in structures so that all objects start on aligned addresses. Note that this command does NOT change the code. It changes the address allocation within the structure, which affects the way in which FPT determines COMMON block and EQUIVALENCE relationships. The command PAD STRUCTURES modifies the code to insert padding variables to enforce alignment.

An aligned address is an address which is a multiple of the alignment granularity of the object, where the first address of a COMMON block, of a group of equivalenced variables, or of a structure, is address zero.

The alignment granularity of a numeric object is computed as the system granularity or the data size of the object, whichever is the smaller. The system granularity is specified by the command ALIGNMENT GRANULARITY.

For the purpose of this command, the alignment granularity of an object of type character is one byte. This differs from the computation used in the CHECK ALIGNMENT command, but conforms to the behaviour of most compilers which force alignment. However, character variables are usually accessed more efficiently if they start on aligned addresses.

The alignment granularity of objects of type RECORD is computed as the granularity of the largest object within the record.

Note that some Fortran compilers have compilation switches to force alignment of objects, and that some force alignment silently, without warning. It is important to find the behaviour of the system in use. When new code is developed, it is recommended that users do not force the alignment of objects with this command, but check the alignment of objects with the command CHECK ALIGNMENT.

Where to use this command:

Operating system command line

Yes


Configuration file, config.fsp

Yes


Specification (FSP) files, *.fsp

Yes


Interactively, to FPT> prompt:

No


Interactive command files

No


Embedded in the Fortran code

Yes


Default:

Alignment is not forced by default (Note that defaults may be changed in the configuration file)

Example:

The structure declaration:

STRUCTURE /PHAS_STR/ CHARACTER*30 GENERIC CHARACTER*30 SPECIFIC CHARACTER*30 SUB_SPECIFIC INTEGER*4 DAY CHARACTER*3 MONTH INTEGER*4 YEAR CHARACTER*30 MAP INTEGER*4 GRID_N INTEGER*4 GRID_E END STRUCTURE

forces some of the integers to mis-aligned addresses. With default packing for, for example, VAX/VMS, FPT reports the addresses:

Name      Sub-prog/Struct  Use/COMMON  Address  Type     Size
----      ---------------  ----------  -------  ----     ----
PHAS_STR   MAIN            Structure           UNTYPED
                  Field(s):
                      GENERIC              0   CHARACTER *30
                      SPECIFIC            30   CHARACTER *30
                      SUB_SPECIFIC        60   CHARACTER *30
                      DAY                 90   INTEGER   *4
                      MONTH               94   CHARACTER *3
                      YEAR                97   INTEGER   *4
                      MAP                101   CHARACTER *30
                      GRID_N             131   INTEGER   *4
                      GRID_E             135   INTEGER   *4

The command % align structures instructs FPT to compute aligned addresses:

Name      Sub-prog/Struct  Use/COMMON  Address  Type     Size
----      ---------------  ----------  -------  ----     ----
PHAS_STR   MAIN            Structure           UNTYPED
                  Field(s):
                      GENERIC              0   CHARACTER *30
                      SPECIFIC            30   CHARACTER *30
                      SUB_SPECIFIC        60   CHARACTER *30
                      DAY                 92   INTEGER   *4
                      MONTH               96   CHARACTER *3
                      YEAR               100   INTEGER   *4
                      MAP                104   CHARACTER *30
                      GRID_N             136   INTEGER   *4
                      GRID_E             140   INTEGER   *4

FPT also inserts warnings in the code where spaces are left in the memory allocation for the structure:

STRUCTURE /PHAS_STR/ CHARACTER*30 GENERIC CHARACTER*30 SPECIFIC CHARACTER*30 SUB_SPECIFIC INTEGER*4 DAY !---------------------^---------------------------------------------- !!! FPT - 2817 Space left in STRUCTURE by forced alignment of object !-------------------------------------------------------------------- CHARACTER*3 MONTH INTEGER*4 YEAR !----------------------^--------------------------------------------- !!! FPT - 2817 Space left in STRUCTURE by forced alignment of object !-------------------------------------------------------------------- CHARACTER*30 MAP INTEGER*4 GRID_N !------------------------^------------------------------------------- !!! FPT - 2817 Space left in STRUCTURE by forced alignment of object !-------------------------------------------------------------------- INTEGER*4 GRID_E END STRUCTURE

See also:

ALIGN OBJECTS IN COMMON BLOCKS

ALIGNMENT GRANULARITY

CHECK ALIGNMENT

PAD STRUCTURES


Copyright ©1995 to 2014 Software Validation Ltd. All rights reserved.