鱼C论坛

 找回密码
 立即注册
查看: 1466|回复: 11

结构体占大小

[复制链接]
发表于 2015-9-22 16:06:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有人懂吗
_J)JM$LKZA$]L7IO48UA%PR.png
0R9X(_UW0N7F(T46TO96WS0.png
T]H{UQ~TKTEXUH`L8D4C89K.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-22 17:19:28 | 显示全部楼层
8  一个long 占4个字节,char占1个字节。因为是按8个字节来算,所以对齐后事8
7 因为里面的结构体占8个字节 Long long 类型也占8个字节,而且没有规定是按照什么对齐,所以这里char型需要用7个字节来填补自己满足8字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-22 17:30:05 | 显示全部楼层
康小泡 发表于 2015-9-22 17:19
8  一个long 占4个字节,char占1个字节。因为是按8个字节来算,所以对齐后事8
7 因为里面的结构体占8个字 ...

按照最大的那个对齐吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-22 17:56:41 | 显示全部楼层
ianv 发表于 2015-9-22 17:30
按照最大的那个对齐吧?

是啊,不过是在没有在程序中指明按多少字节对齐的情况下。然后因为这里楼主的代码中有一个#program pack(8) 所以这里以8个字节对齐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-22 18:48:10 | 显示全部楼层
康小泡 发表于 2015-9-22 17:56
是啊,不过是在没有在程序中指明按多少字节对齐的情况下。然后因为这里楼主的代码中有一个#program pack( ...

这样啊。学习了。以前都没有自己定义过对其大小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 08:43:07 | 显示全部楼层
康小泡 发表于 2015-9-22 17:56
是啊,不过是在没有在程序中指明按多少字节对齐的情况下。然后因为这里楼主的代码中有一个#program pack( ...

#pragma pack(8)

#pragma pack()
是一对,也就是说中间的都是8字节对齐 ,是这样吗

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 08:47:35 | 显示全部楼层
康小泡 发表于 2015-9-22 17:19
8  一个long 占4个字节,char占1个字节。因为是按8个字节来算,所以对齐后事8
7 因为里面的结构体占8个字 ...

答案是这个
H517{U1]Q9FCMYRMP(6PGUP.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-23 09:47:25 | 显示全部楼层

谢谢,我懂了。
第二个问题我理解错了。
第二个问题里面  char的下一个类型是char ,char型接下来是int型,所以他们先是按照int型的来对齐,int型占4个字节。 对齐后就成了1*** 1*** 1111 然后因为接下来是long long 型,long long 型所占字节为8个字节,所以前面的需要以8字节来对齐   所以就变成(1*** 1***)(1111 1111) (1111 1111)


开始我并不知道的一个点是是先根据与自己临近的最大的来对齐。长知识了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2015-9-23 10:13:30 | 显示全部楼层
康小泡 发表于 2015-9-23 09:47
谢谢,我懂了。
第二个问题我理解错了。
第二个问题里面  char的下一个类型是char ,char型接下来是in ...


那你还是和答案不一样啊?而且人家那里有int型的变量?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 10:31:03 | 显示全部楼层
本帖最后由 wwwheihei 于 2015-9-23 10:36 编辑
wwwheihei 发表于 2015-9-23 10:13
那你还是和答案不一样啊?而且人家那里有int型的变量?


你的理解是不对的,我现在理解了,如果不申明按多少字节对齐,他们是按照自身的类型大小来对齐的,也就是说放到类型大小的边界上,并不是按照类型中最大的来对齐,除非是结构体内嵌,就像我的题目那样,如果你不信你做这个题目:
struct node{

char a;
char b;

short  c;

int  d;



};
用你的方法计算他占的字节数??????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-23 11:09:42 | 显示全部楼层
wwwheihei 发表于 2015-9-23 10:31
你的理解是不对的,我现在理解了,如果不申明按多少字节对齐,他们是按照自身的类型大小来对齐的,也就 ...

8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 12:12:46 | 显示全部楼层
本帖最后由 wwwheihei 于 2015-9-23 13:20 编辑


哦对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 09:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表