我在 C++ 中创建了一个简单的类 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 个字节。谁能向我解释为什么会这样?谢谢。