Por que o tamanho da classe aumenta quando int64_t muda para int32_t

No meu primeiro exemplo, tenho dois campos de bits usandoint64_t. Quando compilo e obtenho o tamanho da classe, recebo 8.

class Test
{
    int64_t first : 40;
    int64_t second : 24;
};

int main()
{
    std::cout << sizeof(Test); // 8
}

Mas quando eu mudo o segundo bitfeild para ser umint32_t o tamanho da classe dobra para 16:

class Test
{
    int64_t first : 40;
    int32_t second : 24;
};

int main()
{
    std::cout << sizeof(Test); // 16
}

Isso acontece no GCC 5.3.0 e no MSVC 2015. Mas por quê?

questionAnswers(4)

yourAnswerToTheQuestion