关于包结构大小。(100分)

  • 主题发起人 主题发起人 hawkview
  • 开始时间 开始时间
H

hawkview

Unregistered / Unconfirmed
GUEST, unregistred user!
下列包结构,我调试是告诉我大小为4164,可我手工计算为4160,why?

TermMoniItemStruc=record
MoniTypeID:cardinal;
//监控子类型名称
Value:comp;
//监控子类型值(需要将原实数值剩以10000转为整数,解包时再除以10000还原)
AlarmTypeId:cardinal;
//警报类型标识
end;
TermMoniAplStruc=record
IpAddress : Array [0..19] of char;
//监控主机IP 地址
LanId : cardinal;
MoniTypeId : cardinal;
//监控父类型名称
EntityName: Array [0..29] of char;
//监控实体名称
RunTime: cardinal;
//运行时间
MoniItemNum:byte; //监控子项数目
align:byte;
TermMoniItem:Array [0..255]of TermMoniItemStruc;
end;
 
可能和数据哉对齐方式优化有点关系吧
 
如此小的误差,估计是全角和半角,你没有计算或没看出来,特别是标点符号
 
是4字节对齐的原因.加个Packed关键字
TermMoniItemStruc=Packed record
MoniTypeID:cardinal;
//监控子类型名称
Value:comp;
//监控子类型值(需要将原实数值剩以10000转为整数,解包时再除以10000还原)
AlarmTypeId:cardinal;
//警报类型标识
end;
TermMoniAplStruc=Packed record
IpAddress : Array [0..19] of char;
//监控主机IP 地址
LanId : cardinal;
MoniTypeId : cardinal;
//监控父类型名称
EntityName: Array [0..29] of char;
//监控实体名称
RunTime: cardinal;
//运行时间
MoniItemNum:byte; //监控子项数目
align:byte;
TermMoniItem:Array [0..255]of TermMoniItemStruc;
end;
 
那么我告诉你吧,就是对齐优化造成的。
在文件开头加入{$ALIGN OFF}即可
EntityName: Array [0..29] of char;
//实际32字节
MoniItemNum:byte;
align:byte;
//2个成员加起来实际4字节
 
接受答案了.
 
后退
顶部