https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114399
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- That is doing: long long f __attribute__((packed,aligned(4))); Will produce the same result between the 2 targets. Likewise: long long f __attribute__((packed,aligned(8))); With -Wpadded you can see the padding between e and f is added. <source>:7:13: warning: padding struct to align 'd::f' [-Wpadded] Just the padding is different between the 2 targets due to the alignment of long long being 4 bytes (it is an old ABI where 4 bytes was the only alignment at the time when long long was added, double have a similar thing too).