Это из-за заполнения и выравнивания.
A union
может иметь заполнение в конце, чтобы обеспечить правильное выравнивание его полей, когда объединение является частью массива.
Inв этом случае есть поле с массивом типа int
и другое с массивом типа float
. Эти типы, скорее всего, имеют размер 4 байта, поэтому размер объединения должен быть кратным 4. Поэтому вместо 18 размер будет равен 20, чтобы удовлетворить это выравнивание.