Выравнивание памяти в C-структурах

Я работаю на 32-битной машине, поэтому полагаю, что выравнивание памяти должно быть 4 байта. Скажем, у меня есть структура:

typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
} myStruct;

реальный размер составляет 6 байтов, и я предполагаю, что выровненный размер должен быть 8, но sizeof (myStruct) возвращает мне 6.

Однако, если я напишу:

typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct;

] реальный размер - 10 байт, выровненный - 12, и на этот раз sizeof (myStruct) == 12 .

Может кто-нибудь объяснить, в чем разница?

53
задан Max Galkin 30 December 2016 в 10:02
поделиться