我有下一个代码:为什么记录的大小不等于其字段大小的总和?
type TRecord1 = record
myarr: array [0..31] of single:
end;
type TRecord2 = record
b1, b2, b3, b4, b5, b6: byte;
end;
type TRecord3 = record
myarr: array [0..31] of single:
b1, b2, b3, b4, b5, b6: byte;
end;
procedure TForm1.FormCreate(Sender: Tobject);
begin
ShowMessage(IntToStr(SizeOf(TRecord1))+'+'+IntToStr(SizeOf(TRecord2))+
'='+IntToStr(SizeOf(TRecord3)));
end;
该程序将显示以下信息:
128+6=136
为什么SizeOf(TRecord3)
等于136,而不是134?
经验法则:如果您打算在文件中使用某些结构 - 将它们声明为“packed”。 – OnTheFly 2012-03-21 15:03:22
我的经验法则是永远不会将记录的二进制表示写入文件 – 2012-03-21 17:21:13
是避免存储二进制数据,但打包的指令在I/O(dll's,串行通信等)期间传递记录时使用它。尽管使用标准化的二进制/字符串转换技术应该适用于新的开发。 – 2012-03-21 18:11:08