我在将Delphi 7的代码转换为2010时遇到了一个奇怪的问题。它与记录有关。下面定义的记录,在D7中大小为432字节,在D2009(和2010)中为496字节。我知道,一个简单的解决方案是将其设置为紧凑记录,那么所有版本都变成426字节......然而,我们存储了数据,并将记录流式传输,现在我们正在尝试使用更新的语言读取这些流。
TToTry = Record
a,b,c,d : Extended;
e,f,g,h : Extended;
i : String[15];
j,k,l,m,n,o,p,q,r,s,t : Array[1..3] of Extended; End;
在调查这个问题时,我创建了另一条记录,但不知何故,大小相同?该记录较小,但具有相同的数据类型,在所有语言版本中大小相同。
TMyRecord = Record
Ext1 : Extended;
Ext2 : Extended;
Ext3 : Extended;
Ext4 : Extended;
Ext5 : Extended;
Ext6 : Extended;
Int1 : Integer;
Int2 : Integer;
char1 : AnsiChar;
char2 : AnsiChar;
MyString : String[15];
Arr1 : Array[1..3] of Extended;
Arr2 : Array[1..3] of Extended; end;
有人知道为什么一个记录如此不同,而另一个记录相同吗?这肯定与Delphi中的字节边界对齐有关。但是从一个版本到下一个版本发生了什么巨大的变化呢?