Как уже говорили другие, структуры дополняются для выравнивания, и такое дополнение зависит не только от типа элементов, но также от порядка элементов, в которых они ' переопределено.
Например, рассмотрим эти две структуры A
и B
, как они определены ниже. Обе структуры идентичны с точки зрения членов и типов; единственное отличие состоит в том, что порядок, в котором определены члены, не одинаков:
struct A
{
int i;
int j;
char c;
char d;
};
struct B
{
int i;
char c;
int j;
char d;
};
Будет ли sizeof(A)
равен sizeof(B)
только потому, что у них одинаковое количество членов одного типа? Нет. Попробуйте напечатать размер каждого:
cout << "sizeof(A) = "<< sizeof(A) << endl;
cout << "sizeof(B) = "<< sizeof(B) << endl;
Выход:
sizeof(A) = 12
sizeof(B) = 16
Удивлены? Смотрите сами вывод: http://ideone.com/yCX4S