2 piyongze piyongze 于 2014.01.22 09:24 提问

C++内存问题,主要是关于对象占用内存,有些糊涂,敬请指导。

#include
class stu
{
private:
int a;
double c;
char p;
};
struct tea
{
int a;
int b;
};
int main()
{
stu st;
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(char
));
printf("%d\n",sizeof(st));
tea te;
printf("%d\n", sizeof(te));
}

代码如上,结果是:
4
8
4
24
8
64位机器下 visual studio 2013结果,
不太明白,为什么类会多出来8个字节。

2个回答

xnlengao
xnlengao   2014.01.22 14:00

这个类的大小计算要字节对齐,类中最长的为double型8个字节,前后两个int都不足8字节,编译器会加上填充字节,3个8字节加起来就是24字节了 而不是实际的16字节.

piyongze
piyongze ok,是的 ,后来测试了,我理解为,变量的起始地址必须是自身大小的整数倍,不知对否?
大约 4 年之前 回复
u012709815
u012709815   2014.01.25 17:10

楼上说的对,所以好的程序员在编写代码时候最好把小字节的变量放在前面,这样可以节省内存。。

piyongze
piyongze 对的 小字节连续放置 大字节连续放置 这样最好
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!