9.10.2 aligned
(alignment)
This attribute specifies a minimum alignment for the variable, measured in bytes. The alignment must be a power of two. For example, the declaration:
int x __attribute__ ((aligned (16))) = 0;
causes the compiler to allocate the global variable x
on a DSC-byte boundary. On the dsPIC DSC device, this
could be used in conjunction with an asm
expression to access DSP
instructions and addressing modes that require aligned operands.
As in the preceding example, you can explicitly specify the alignment (in bytes) that you wish the compiler to use for a given variable. Alternatively, you can leave out the alignment factor and just ask the compiler to align a variable to the maximum useful alignment for the dsPIC DSC device. For example, you could write:
short array[3] __attribute__ ((aligned));
Whenever you leave out the alignment factor in an aligned attribute specification, the compiler automatically sets the alignment for the declared variable to the largest alignment for any data type on the target machine – which in the case of the dsPIC DSC device is two bytes (one word).
The aligned
attribute can only increase the alignment;
you can decrease it by specifying packed
(see below). The
aligned
attribute conflicts with the reverse
attribute. It is an error condition to specify both.
The aligned
attribute can be combined with the
section
attribute. This will allow the alignment to take place in a
named section. By default, when no section is specified, the compiler will generate a
unique section for the variable. This will provide the linker with the best opportunity
for satisfying the alignment restriction without using internal padding that may happen
if other definitions appear within the same aligned section.