STATIC is the default storage class for External scope variables. However, STATIC variables can have either Internal or External scope.
For internal variables declared with STATIC storage class, storage is
allocated by the compiler in the Static Internal Control Section for its
compiled procedure. Thus, the storage is pre-allocated and resides
in the program load module (unless it is in a dynamically fetched procedure).
For external variables declared with STATIC storage class, storage is
resolved by the linkage editor and resides as a control section under its
own name in the program load module.
In either case, the storage is considered to have been allocated prior to
execution time and cannot be freed until the program terminates ( or, in the case of a dynamic procedure, until it is released). The programmer has no control over the allocation and freeing of STATIC storage.
STATIC storage is most commonly used in repetitively invoked procedures
for locally declared variables when the value of an identifier will never change the value of an identifier needs to be retained for the next invocation.
UNALIGNED is used to avoid 'padding' bytes. In an ALIGNED structure, the compiler will add bytes if needed to align, say, a BINARY FIXED(15) field on a half-word boundary. Typically, you wouldn't want this in an I/O input structure.