奇怪了,sizeof与结构的问题

jixiaoqiang 2006-12-31 04:35:17
定义了一个结构TMsg_Bind,里面仅仅包含两个结构TMsg_Head,TMsg_Body,结果发现使用
sizeof计算Tmsg_Bind类型的变量BindData的大小时候,不是他两个结构大小的和,请问为什么??

var
BindData:TMsg_Bind;
begin
ShowMessage(IntToStr(sizeof(BindData.MsgHead))); //20
ShowMessage(IntToStr(sizeof(BindData.MsgBody))); //41
ShowMessage(IntToStr(sizeof(BindData))); //64 ???

各结构定义如下:

TMsgHead = record //所有消息体的消息头 20字节
iMsgLen:Longint;
iMsgID:Longint;
sMsgSerial:Array[0..11] of char;
end;

TMsgBody_Bind = record //bind消息体 41字节
iLoginType:Byte;
sLoginUser:Array[0..15] of char;
sLoginPwd:Array[0..15] of char;
sReserve:Array[0..7] of char;
end;

TMsg_Bind=record
MsgHead:TMsgHead;
MsgBody:TMsgBody_Bind;
end;
...全文
148 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
trainbox 2006-12-31
  • 打赏
  • 举报
回复

TMsgHead = packed record //所有消息体的消息头 20字节
iMsgLen:Longint;
iMsgID:Longint;
sMsgSerial:Array[0..11] of char;
end;

TMsgBody_Bind = packed record //bind消息体 41字节
iLoginType:Byte;
sLoginUser:Array[0..15] of char;
sLoginPwd:Array[0..15] of char;
sReserve:Array[0..7] of char;
end;

TMsg_Bind = packed record
MsgHead:TMsgHead;
MsgBody:TMsgBody_Bind;
end;

这样定义的话就是两个之和了
trainbox 2006-12-31
  • 打赏
  • 举报
回复
delphi编译器有字段对齐的功能,默认是八位对齐

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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