Next: Bit Fields, Previous: Structure Layout, Up: Structures [Contents][Index]
In GNU C you can force a structure to be laid out with no gaps by
adding __attribute__((packed))
after struct
(or at the
end of the structure type declaration). Here’s an example:
struct __attribute__((packed)) foo { char a; int c; char b; };
Without __attribute__((packed))
, this structure occupies 12
bytes (as described in the previous section), assuming 4-byte
alignment for int
. With __attribute__((packed))
, it is
only 6 bytes long—the sum of the lengths of its fields.
Use of __attribute__((packed))
often results in fields that
don’t have the normal alignment for their types. Taking the address
of such a field can result in an invalid pointer because of its
improper alignment. Dereferencing such a pointer can cause a
SIGSEGV
signal on a machine that doesn’t, in general, allow
unaligned pointers.