Я знаю, что char и int вычисляются как 8 байтов на 32-битных архитектурах из-за выравнивания, но я недавно столкнулся с ситуацией, когда структура с тремя шортами была зарегистрирована как 6 байтов оператором sizeof, Код выглядит следующим образом:
#include <iostream>
using namespace std ;
struct IntAndChar
{
int a ;
unsigned char b ;
};
struct ThreeShorts
{
unsigned short a ;
unsigned short b ;
unsigned short c ;
};
int main()
{
cout<<sizeof(IntAndChar)<<endl; // outputs '8'
cout<<sizeof(ThreeShorts)<<endl; // outputs '6', I expected this to be '8'
return 0 ;
}
Компилятор: g++ (Debian 4.3.2-1.1) 4.3.2. Это действительно озадачивает меня, почему не выполняется выравнивание для структуры, содержащей 3 шорта?