9.2 __align

The __align keyword instructs the compiler to align a variable on an n-byte boundary.

__align is a storage class modifier. It does not affect the type of the function.

Syntax

__align(n)
Where:
n
is the alignment boundary.
For local variables, n can take the values 1, 2, 4, or 8.
For global variables, n can take any value up to 0x80000000 in powers of 2.

Usage

__align(n) is useful when the normal alignment of the variable being declared is less than n. Eight-byte alignment can give a significant performance advantage with VFP instructions.
__align can be used in conjunction with extern and static.

Restrictions

Because __align is a storage class modifier, it cannot be used on:
  • Types, including typedefs and structure definitions.
  • Function parameters.
You can only overalign. That is, you can make a two-byte object four-byte aligned but you cannot align a four-byte object at 2 bytes.

Examples

__align(8) char buffer[128];  // buffer starts on eight-byte boundary
void foo(void)
{
    ...
    __align(16) int i; // this alignment value is not permitted for
                       // a local variable
    ...
}
__align(16) int i; // permitted as a global variable.
Related reference
7.104 --min_array_alignment=opt
9.60 __attribute__((aligned)) variable attribute
Non-ConfidentialPDF file icon PDF versionARM DUI0375E
Copyright © 2007, 2008, 2011, 2012, 2014 ARM. All rights reserved.