You are missing the fact that the font size should be a multiple of its alignment (limited by the actual equipment), they should not be equal.
In the case of long double this means
_Alignof (long double) == 4 sizeof (long double) == 12
with gcc / x86 and
_Alignof (long double) == 16 sizeof (long double) == 16
with gcc / x64, where in both cases the long double has 80-bit extended precision.
If we were not limited to alignment, then naturally we ended up with
sizeof (long double) == 10
If there is alignment, we must either go with alignment 2 (which is not for reasons of efficiency), or introduce an addition to arrays so that the elements align correctly. This violates the semantics of the C language, since the size of the array is a product of its size and the number of elements.
source share