See: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12076
Add: -fno-elide-constructors as well as -fprofile-arcs -ftest-coverage to the compile line to partially fix this.
Force space used to be minimised to the actual sizes of the datatypes. Char might use up 4 bytes to get 4 byte alignment if the struct is not packed in order to gain a performance boost when adressing its contents.
struct header { char a; int b; double c; } __attribute__ ((__packed__));