【发布时间】:2010-07-08 17:43:23
【问题描述】:
在将代码从 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 中的字节边界对齐有关。但是从一个版本到下一个版本发生了如此巨大的变化?
【问题讨论】:
-
我知道 Delphi 记录的默认字节对齐在最近的版本(我认为是 2009 年)中发生了变化,但我不确定细节。
标签: delphi delphi-2009 delphi-2010 record