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