You copied the Doc URL to your clipboard.

Unaligned pointers in C and C++ code

By default, the compiler expects conventional C and C++ pointers to point to naturally aligned words in memory because this enables the compiler to generate more efficient code.

If you want to define a pointer that can point to a word at any address, you must specify the __packed qualifier when defining the pointer. For example:

 __packed int *pi; // pointer to unaligned int

When a pointer is declared as __packed, the compiler generates code that correctly accesses the dereferenced value of the pointer, regardless of its alignment. The generated code consists of a sequence of byte accesses, or variable alignment-dependent shifting and masking instructions, rather than a simple LDR instruction. Consequently, declaring a pointer as __packed incurs a performance and code size penalty.

See also

Reference

Compiler Reference:

Was this page helpful? Yes No