Это связано с тем, как Swift выравнивает ваши свойства в памяти.Для вашей первой структуры alignment
равен 2, тогда как вторая структура имеет выравнивание 1.
Ваши свойства в Test
не сохраняются в памяти, упакованной вместе, как показано ниже:
x y y
где x
представляет байт для a
, а y
представляет байт для b
.
Это выглядит примерно так:
x y y
Примечаниезаполнение после x
.
Смысл, который я здесь пытаюсь подчеркнуть, заключается в том, что Swift разделяет часть памяти на «кусочки», чтобы поместить свойства ваших структур. Эти равные кусочки должны быть в состояниисодержать все ваши свойства.Вот почему в Test
память должна быть разрезана на куски по 2 байта, чтобы уместиться в UInt16
.
В Test2
, однако, разрезая память на кусочки по 1 байтдостаточно, чтобы содержать UInt8
с.
Это число "Сколько байт на фрагмент" является alignment
.
. Почему Swift сокращает память таким образом, прочитайте это.