Performance penalty associated with marking whole structures as packed
Reading from and writing to whole structures qualified with
__packed requires unaligned accesses and can therefore incur a performance penalty.
When optimizing a
struct that is packed,
the compiler tries to deduce the alignment of each field, to improve
access. However, it is not always possible for the compiler to deduce
the alignment of each field in a
In contrast, when individual fields in a
struct are declared
__packed, fast access is guaranteed to naturally
aligned members within the
when the use of a packed structure is required, ARM recommends that
you always pack individual fields of the structure, rather than
the entire structure itself.
Declaring individual non-aligned fields of a
has the advantage of making it clearer to the programmer which fields
struct are not naturally aligned.