C++ で単純なクラス Storer を作成し、メモリ割り当てを操作しました。これには 6 つのフィールド変数が含まれており、それらはすべてコンストラクターで割り当てられます。
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
文字 c が 4 バイトを占めるのはなぜですか? 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 バイトが不必要に割り当てられていることを確認します。なぜこれが起こっているのか誰にも説明できますか?ありがとう。