# ASSUME_ALIGNED

General Compiler Directive: Specifies that an entity in memory is aligned.

!DIR$ ASSUME_ALIGNED address1:n1 [, address2:n2]...

address | An array variable. It can be of any data type, kind, or rank > 0. It can be an array component of a variable of derived type or a record field reference, host or use associated, or have the ALLOCATABLE or POINTER attribute. It cannot be any of the following: An entity in COMMON (or an entity EQUIVALENCEd to something in COMMON) A component of a variable of derived type or a record field reference An entity accessed by use or host association If it is a module variable, that address is silently ignored.
n | A positive integer constant expression. Its value must be a power of 2 between 1 and 256, that is, 1, 2, 4, 8, 16, 32, 64, 128, 256. It specifies the memory alignment in bytes of address.

The ASSUME_ALIGNED directive must appear after the specification statements section or inside the executable statements section.

If you specify more than one address:n item, they must be separated by a comma.

If address is a Cray POINTER or it has the POINTER attribute, it is the POINTER and not the pointee or the TARGET that is assumed aligned.

If the check assume option is specified and address is not aligned on an n-byte boundary at run time, an error message is displayed and execution is aborted.

For more information, see the example in the description of the ASSUME directive.

## Example

The following example shows the correct placement and usage of the ASSUME_ALIGNED directive:

    SUBROUTINE F(A, N)
      TYPE NODE
        REAL(KIND=8), POINTER :: A(:,:)
      END TYPE NODE

      TYPE(NODE), POINTER :: NODES

      ALLOCATE(NODES)
      ALLOCATE(NODES%A(1000,1000))

    !DIR$ ASSUME_ALIGNED NODES%A(1,1) : 16
      DO I=1,N
        NODES%A(1,I) = NODES%A(1,I)+1
      ENDDO
    …
    END

It is illegal to place ASSUME_ALIGNED inside a type definition; for example:

    TYPE S
    !DIR$ ASSUME_ALIGNED T : 16           ! this is an error
      REAL(8), ALLOCATABLE :: T(:)
    END TYPE S

Parent topic: A to B

## See Also

General Compiler Directives
Syntax Rules for Compiler Directives
ATTRIBUTES ALIGN
ASSUME directive
check compiler option