Странное распределение памяти C++

Я создал простой класс Storer на C++, экспериментируя с распределением памяти. Он содержит шесть переменных поля, все из которых назначаются в конструкторе:

int x;
int y;
int z;
char c;
long l;
double d;

Меня интересовало, как эти переменные хранятся, поэтому я написал следующий код:

Storer *s=new Storer(5,4,3,'a',5280,1.5465);
cout<<(long)s<<endl<<endl;
cout<<(long)&(s->x)<<endl;
cout<<(long)&(s->y)<<endl;
cout<<(long)&(s->z)<<endl;
cout<<(long)&(s->c)<<endl;
cout<<(long)&(s->l)<<endl;
cout<<(long)&(s->d)<<endl;

Меня очень заинтересовал вывод:

33386512

33386512
33386516
33386520
33386524
33386528
33386536

Почему char c занимает четыре байта? sizeof(char)возвращает, конечно же, 1, так почему же программа выделяет больше памяти, чем ей нужно? Это подтверждает, что выделяется слишком много памяти с помощью следующего кода:

cout<<sizeof(s->c)<<endl;
cout<<sizeof(Storer)<<endl;
cout<<sizeof(int)+sizeof(int)+sizeof(int)+sizeof(char)+sizeof(long)+sizeof(double)<<endl;

который печатает:

1
32
29

подтверждая, что действительно 3 байта выделяются без необходимости. Может ли кто-нибудь объяснить мне, почему это происходит? Спасибо.

12
задан Matt 12 June 2013 в 17:52
поделиться