https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91672
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note the .size does match up with what GCC outputs though: e.g. a1: .size a1, 18 a1: .xword 1 .hword 1 .hword 1 .zero 6 that is size of 18. Basically gcc's padding is always 6 in size and not changing based on the size that is needed there. This is also normally how you get the size when allocating dynamically too: sizeof(struct A) + N*sizeof(__INT16_TYPE__).