结构嵌套结构之后的大小是多少?

cglee 2005-08-12 09:06:43
看这个结构,里面有一个成员是结构变量,用sizeof求其大小是多少,为什么?

struct MyStruct
{
char dda;
struct{
int dda11;
int dda12;
int dda13;
int dda14;
char c;
double dda2;
} d;
int type;
};
...全文
137 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingzheng0609 2005-08-12
  • 打赏
  • 举报
回复
**** ****
**** ****
**** ****
**** ****
**** ****
**** ****

最大的类型是double 所以8字节对齐, 看到没有? 6*8 = 48
snowbirdfly 2005-08-12
  • 打赏
  • 举报
回复
http://blog.csdn.net/o_ocalmhawk/archive/2005/04/20/356126.aspx
http://blog.csdn.net/o_ocalmhawk/archive/2005/04/20/356126.aspx
我也刚遇到这种问题,相互学习~~~
到全文检索里面有许多介绍~~~
jlkzzh 2005-08-12
  • 打赏
  • 举报
回复
请看MSDN中http://dev.csdn.net/Develop/article/42/42446.shtm
oo 2005-08-12
  • 打赏
  • 举报
回复
内嵌的struct里的成员最大的是double(8字节),dda2需要8的倍数地址,内嵌结构大小要是8的倍数。
外面结构的成员d也需要在8的倍数地址,整个结构大小也要是8的倍数。
cglee 2005-08-12
  • 打赏
  • 举报
回复
为什么默认是8bytes对齐的?
ruiding 2005-08-12
  • 打赏
  • 举报
回复
TO:darkstar21cn(爱上小猫的小狗)(读不懂爱情所以来读程序)

那为什么char dda; 是8bytes 而不是32bytes 呢?还有int type
darkstar21cn 2005-08-12
  • 打赏
  • 举报
回复
因为默认是8bytes对齐的,你可以使用
#pragma pack (4)//改成4bytes对齐
fujingn188 2005-08-12
  • 打赏
  • 举报
回复
请问楼上为什么要这样对齐?
darkstar21cn 2005-08-12
  • 打赏
  • 举报
回复
这个已经讨论很多了,主要是一个字节对齐问题。
char dda; //空7bytes
struct{
int dda11;//4bytes
int dda12;//4bytes
int dda13;//4bytes
int dda14;//4bytes
char c;  //1bytes 空7bytes
double dda2; //8bytes
} d;//这就是32bytes
int type; //4bytes 空4bytes
1+7 + 32 + 8 = 48
fujingn188 2005-08-12
  • 打赏
  • 举报
回复
我在VC下试了下为48,char dda;char c;int type;都跟double dda2一样为8个字节,不知道什么原因.
healer_kx 2005-08-12
  • 打赏
  • 举报
回复
首先看字节对齐的选项,
然后内嵌的结构不影响大小,只是一个访问命名空间的问题。

64,676

社区成员

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

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