 |
aligned |
Syntax: aligned [(alignment)]
This attribute specifies a minimum alignment (in bytes) for variables
of the specified type. For example, the declarations:
struct S { short f[3]; } __attribute__ ((aligned (8)));
typedef int more_aligned_int __attribute__ ((aligned (8)));
force the compiler to insure (as far as it can) that each variable whose
type is struct S
or more_aligned_int
will be allocated and
aligned at least on a 8-byte boundary.
Note that the alignment of any given struct
or union
type
is required by the ISO C standard to be at least a perfect multiple of
the lowest common multiple of the alignments of all of the members of
the struct
or union
in question. This means that you can
effectively adjust the alignment of a struct
or union
type by attaching an aligned
attribute to any one of the members
of such a type, but the notation illustrated in the example above is a
more obvious, intuitive, and readable way to request the compiler to
adjust the alignment of an entire struct
or union
type.
As in the preceding example, you can explicitly specify the alignment
(in bytes) that you wish the compiler to use for a given struct
or union
type. Alternatively, you can leave out the alignment factor
and just ask the compiler to align a type to the maximum
useful alignment for the target machine you are compiling for. For
example, you could write:
struct S { short f[3]; } __attribute__ ((aligned));
Whenever you leave out the alignment factor in an aligned
attribute specification, the compiler automatically sets the alignment
for the type to the largest alignment which is ever used for any data
type on the target machine you are compiling for (useless in TIGCC, since everything
is already aligned well enough with the default 2-byte alignment).
The aligned
attribute can only increase the alignment; but you
can decrease it by specifying packed
as well.