Я полагаю, что вы включили функцию !. Я не смог получить разумный размер с вашим TToTry
с D2007, поэтому мне пришлось искать адреса полей с помощью отладчика;
Во-первых, размер записи ниже,
{$A8}
type
TToTry = record
j: array[1..3] of Extended;
k: array[1..3] of Extended;
l: array[1..3] of Extended;
m: array[1..3] of Extended;
end;
равно 128 (32 * 4). Это ожидается, поскольку Extended
равен 10 байтов, 30 байтов будут выровнены по 32 байта.
Но размер этой записи,
{$A8}
type
TToTry = record
j, k, l, m: array[1..3] of Extended;
end;
- это 120 (30 * 4). Это, безусловно, неожиданно - поля все равно должны выравниваться на 8-байтовой границе.
(у меня нет D7 для проверки, но я так думаю :)
Итак, теперь мы знаем, что сгруппированные поля упакованы, из этого следует, что выравнивание на D7 составляет 8 байт, а ваша запись почти упакована;
TToTry = Record
a,b,c,d : Extended; // 40 bytes (8*5)
e,f,g,h : Extended; // 40 bytes (8*5)
i : String[15]; // 16 bytes (8*2)
j,k,l,m,n,o,p,q,r,s,t: Array[1..3] of Extended; // 330 bytes
End;
Компилятор добавляет 6 байтов к последней группе, чтобы она была кратна 8, а затем вы получите 40 + 40 + 16 + 336 = 432 байта.
С D2009 / D2010 вы либо объявляете каждое поле - без группировки, либо поведение изменяется. В любом случае упакуйте вашу запись и добавьте в конец фиктивное поле массива из 6 байтов, и все будет хорошо.
Если это не сработает, посмотрите на адреса полей вашей записи с помощью D7, затем создайте точный дубликат на D2009, используя упакованную запись и, при необходимости, используя фиктивные поля, после того как вы импортировали сохраненные данные, которые вы можете удалить фиктивные поля.
-
Я никогда не знал такого поведения, и я нигде не могу найти его документированным. Тем не менее, это так похоже на функцию, что я не решаюсь назвать это ошибкой. Я не знаю, что такое же поведение с D2009 или D2010, проверьте, если это так. Если это так, чтобы получить ожидаемые результаты - не иметь наполовину упакованных записей - не ленитесь и объявляйте каждое поле отдельно для неупакованных записей.