OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4278|回复: 6

用sizeof测试结构体大小的问题

[复制链接]

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2014-11-1
在线时间
0 小时
发表于 2014-11-22 15:00:28 | 显示全部楼层 |阅读模式
5金钱
定义了一个FAT文件系统DBR数据结构类型:
typedef struct _FAT32_DBR
{
unsigned char JmpInstruction[3];
unsigned char Fat_Flag[8];
unsigned short SecSize;
unsigned char SecNumPerCluster;
unsigned short ResSecNum;
unsigned char FatNum;
unsigned short DirNum;
unsigned short SecNum;
unsigned char MedDes;
unsigned short SecNumOfFat;
unsigned short SecNumPerTrack;
unsigned short HeadNum;
unsigned int UsedSecNum;
unsigned int SecNumOfFat32;
unsigned int SecNumPerFat;
unsigned short Flag;
unsigned short Version;
unsigned int RootDirCluster;
unsigned short FSInfo;
unsigned short SecOfBackupDBR;
unsigned char Resv1[12];
unsigned char DeviceNum;
unsigned char Resv2;
unsigned char BootFlagEx;
unsigned int SerNum;
unsigned char VolLable[11];
unsigned char FatFormatFlag[8];
unsigned char Resv3[420];
unsigned short SigFlag;
}FAT_DBR;

主函数中用:printf("Size_FAT_DBR:%d\r\n",sizeof(FAT_DBR));
这句来测试这个结构体大小,应该为512字节吧,但是sizeof的结果是520字节,这是哪里出问题了?

最佳答案

查看完整内容[请看2#楼]

在缺省对齐下我先给你说下三条准则吧, 【1】结构体变量的首地址能够被其最宽基本类型成员的大小所整除 【2】结构体每个成员相对于结构体首地址的偏移量是成员大小的整数倍 【3】结构体的总大小为结构体最宽基本类型成员大小的整数倍     以上都是结构体中只有基本类型时的缺省对齐方式,当有嵌套复合成员时, 【2】改为:复合成员相对于结构体首地址偏移量是复合成员最宽基本类型大小的整数倍 依据这个算算 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-12-12
在线时间
13 小时
发表于 2014-11-22 15:00:29 | 显示全部楼层
在缺省对齐下我先给你说下三条准则吧,
【1】结构体变量的首地址能够被其最宽基本类型成员的大小所整除
【2】结构体每个成员相对于结构体首地址的偏移量是成员大小的整数倍
【3】结构体的总大小为结构体最宽基本类型成员大小的整数倍
    以上都是结构体中只有基本类型时的缺省对齐方式,当有嵌套复合成员时,
【2】改为:复合成员相对于结构体首地址偏移量是复合成员最宽基本类型大小的整数倍


依据这个算算吧
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-11-22 15:21:30 | 显示全部楼层
我怎么算了1260呢,你顺序没变吧?
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-11-22 15:23:32 | 显示全部楼层
有个最大的成员420字节,至少也得是420的倍数才对。。。。不懂。学艺不精啊
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-11-22 15:37:13 | 显示全部楼层
是520,数组按类型char算。。。
小小蜗牛
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2014-11-1
在线时间
0 小时
 楼主| 发表于 2014-11-22 16:03:25 | 显示全部楼层
回复【2楼】jiutianshenjian:
---------------------------------
顺序没有变
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2014-11-1
在线时间
0 小时
 楼主| 发表于 2014-11-22 16:05:19 | 显示全部楼层
回复【4楼】luofeng:
---------------------------------
谢谢,以前不知道结构体还有这些规则,学习了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 19:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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