关于字节对齐
typedef struct _tag_CommonIdCmd_struct
{
BYTE Cmd_Code;
BYTE Sub_Id;
WORD Sub_Cmd;
}CommonIdCmd;
typedef struct _tag_QureyVer
{
CommonIdCmd Cmd;
BYTE cStatus;
_tag_QureyVer()
{
Cmd.Cmd_Code = 75;
Cmd.Sub_Id = 201;
Cmd.Sub_Cmd = 0xFF30;
cStatus = 0;
}
}QureyVerReport;
QureyVerReport结构体中,无论CommonIdCmd放在前面还是后面其sizeof(QureyVerReport)的值是5,
为什么是5?
CommonIdCmd的长度是4,如果按照字节对齐,那么sizeof(QureyVerReport)的值应该是8才对的啊。
求高手给予详细点的解答。
[解决办法]
是不是与你的编译参数有关
用gcc 64位模式编译时,输出12
[解决办法]
是不是取消了字节对齐.
[解决办法]
VS2010 结果为6
复合类型(结构体,联合,数组,枚举)是要展开为基本类型来进行对齐
相当于
typedef struct _tag_QureyVer
{
//CommonIdCmd Cmd;
BYTE Cmd_Code;
BYTE Sub_Id;
WORD Sub_Cmd;
BYTE cStatus;
}QureyVerReport;
结果为6 可能是结构体的总大小为结构体最宽基本类型成员大小的整数倍
[解决办法]
未取消字节对齐?
对齐必然有个系数,从你这个,你的对齐系数竟然是1...
加上
#pragma pack()试试...
[解决办法]