You copied the Doc URL to your clipboard.

__attribute__((packed)) type attribute

The packed type attribute specifies that a type must have the smallest possible alignment. This attribute only applies to struct and union types.


You must access a packed member of a struct or union directly from a variable of the containing type. Taking the address of such a member produces a normal pointer which might be unaligned. The compiler assumes that the pointer is aligned. Dereferencing such a pointer can be unsafe even when unaligned accesses are supported by the target, because certain instructions always require word-aligned addresses.

Example 3-1 Examples

struct __attribute__((packed)) foobar 
  char x;
  short y;

short get_y(struct foobar *s) 
    // Correct usage: the compiler will not use unaligned accesses
    // unless they are allowed.
    return s->y;

short get2_y(struct foobar *s) 
    short *p = &s->y; // Incorrect usage: 'p' might be an unaligned pointer.
    return *p;  // This might cause an unaligned access.