Я создал простой класс Storer на С++, играя с распределением памяти. Он содержит шесть переменных поля, все из которых назначаются в конструкторе:
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 байта выделяются бесполезно. Может ли кто-нибудь объяснить мне, почему это происходит? Спасибо.