If you want to define a pointer that can point to a word at any address, you must specify the __packed qualifier.
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.
For example, to specify an unaligned pointer:
__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.
Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers of your data.