sizeof(class)问题。

微型蚂蚁 2012-08-21 08:40:23

#include <iostream>
using namespace std;

class abce{
public:
int a;
float b;
string c;
double e;
};

int main(){
abce a1;
cout<<sizeof(int)<<"\t"<<sizeof(float)<<"\t"<<sizeof(string)<<"\t"<<sizeof(double)<<endl;
cout<<sizeof(a1)<<endl;
return 0;
}

输出的结果是:
4 4 4 8
24
问题是:
为什么sizeof(a1)的结果不是4+4+4+8=20?
...全文
115 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
恨天低 2012-08-21
  • 打赏
  • 举报
回复
内存对齐造成的。其中c被补齐到8字节。
zhanshen2891 2012-08-21
  • 打赏
  • 举报
回复
内存对其方式造成的,VC的话默认是8字节,你改成4字节对其就是20了
kingxuke 2012-08-21
  • 打赏
  • 举报
回复
2楼也看看 3楼给出的链接吧,Good Luck!

[Quote=引用 2 楼 的回复:]

这个应该是类里面的成员占20个字节,但是类本身是个对象,它就像指针一样,通过它来引用自己的对象,所以对象本身也占用4个自己。
[/Quote]
youhun_1 2012-08-21
  • 打赏
  • 举报
回复
a,b都是4,加起为8,内存位数足够,c为4,e为8,c被补齐为8,所以,4+4+8+8=24.
许威威 2012-08-21
  • 打赏
  • 举报
回复
这个应该是类里面的成员占用20个字节,但是类本身是个对象,对象引用自己的成员就好比自己像个指针一样,所以也需要占用空间,在和指针关联,不难发现4个字节就是对象本身占用的。
kingxuke 2012-08-21
  • 打赏
  • 举报
回复
看看 C/C++ 内存补齐,你就豁然开朗了。提供个链接,自己学习吧.

C/C++ 内存补齐:
http://blog.csdn.net/digu/article/details/4768623

希望楼主可以理解,Good Luck!
许威威 2012-08-21
  • 打赏
  • 举报
回复
这个应该是类里面的成员占20个字节,但是类本身是个对象,它就像指针一样,通过它来引用自己的对象,所以对象本身也占用4个自己。
jinjianxinxh 2012-08-21
  • 打赏
  • 举报
回复
内存对齐吧
微型蚂蚁 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
看看 C/C++ 内存补齐,你就豁然开朗了。提供个链接,自己学习吧.

C/C++ 内存补齐:
http://blog.csdn.net/digu/article/details/4768623

希望楼主可以理解,Good Luck!
[/Quote]
哦。原来是这样。谢谢

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧