高手请进..........

user0418 2009-10-07 04:03:21
union a {
int a_int1;
double a_double;
int a_int2;
};

typedef struct
{
a a1;
char y;
} b;

class c
{
double c_double;
b b1;
a a2;

};

cout << sizeof(c) << endl;
结果是 32;为什么呀?
...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu4ze4heng4 2009-10-07
  • 打赏
  • 举报
回复
sizeof(char)=1
sizeof(int) =4
sizeof(double)=8
sizeof(a)=8
=======================以上都好理解=============
=====================关键是下面:
sizeof(b)=16 , b是由一个a和char组成,按理说是9,但这里进行了内存补齐
===========================
所以
sizeof(c)=32

建议首先看一MSDN上如何对sizeof进行定义的:
user0418 2009-10-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wanjingwei 的回复:]
a是union的,取最大的double是8个字节
b包含一个a和一char,8字节对齐就是8+8=16
c包含一个double+一个a+一个b=8+8+16=32
[/Quote]

请问 C里面没有对齐规则吗?
如果按对齐规则 a - 8
b - 16
结果应该是48
「已注销」 2009-10-07
  • 打赏
  • 举报
回复
double 占用8个字节
b b1占用12个字节(这里面用到的有字节的对齐方式)
a a1占用8个字节 (因为是union)
失落的凡凡 2009-10-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 x22ray 的回复:]
double 占用4个字节
b b1占用16个字节(这里面用到的有字节的对齐方式)
a a1占用12个字节
[/Quote]

double占8个字节
wanjingwei 2009-10-07
  • 打赏
  • 举报
回复
a是union的,取最大的double是8个字节
b包含一个a和一char,8字节对齐就是8+8=16
c包含一个double+一个a+一个b=8+8+16=32
失落的凡凡 2009-10-07
  • 打赏
  • 举报
回复
因为对齐
x22ray 2009-10-07
  • 打赏
  • 举报
回复
double 占用4个字节
b b1占用16个字节(这里面用到的有字节的对齐方式)
a a1占用12个字节
liao05050075 2009-10-07
  • 打赏
  • 举报
回复
搜索字节对齐

65,210

社区成员

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

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