![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отличие Packed Record от просто Record. [D7, XP]
AlexanderMS © (2006-06-12 19:22:00)В чём заключается отличие типа Packed Recordот простого Record'а? Зачем нужен Packed?
AlexanderMS (2006-06-12 19:57:00) [1]Спасибо. А то я сам засомневался: вроде бы раньше с успехом присваивал без packed.
Piter (2006-06-12 19:44:00) [2]Иными словами, Packed структура занимает меньше места в памяти, но работа с ней происходит медленнее.
Отдельно - это передача структур между модулями (DLL и прочее), когда происходит "передача" структуры между кодами, сгенерированными вообще разными компиляторами. Тогда обычно используют Packed по умолчанию.
Dmitrij_K (2006-06-12 19:44:00) [3]Из книги Бакнелл.Фундаментальные алгоритмы Delphi
стр. 32 (257КБ) http://img506.imageshack.us/img506/6476/alg032resize4gm.jpg
стр. 33 (208КБ) http://img506.imageshack.us/img506/9630/alg033resize3yw.jpg
begin...end (2006-06-12 19:38:00) [4]> tButton © (12.06.06 19:24) [1]
Последняя строка Вашего сообщения абсолютно верна. Чего нельзя сказать об остальных.
Rial (2006-06-12 19:38:00) [5]
> tButton © (12.06.06 19:24) [1]
На самом деле все с точностью до наоборот.
Присваивать можно друг другу любые рекорды.
Как, возвомно, вы слышали, сушествует такое понятие, как
выварнивание записи по длине.
Record Field Alignment.
У меня 8, возможно - это не по умолчанию.
1.
Использование Packed уменьшает размер записи.
BigRec=record
I,J:Integer;
B:Byte;
E:Extended;
C:Byte;
L:Cardinal;
end;
SmallRec=packed record
I,J:Integer;
B:Byte;
E:Extended;
C:Byte;
L:Cardinal;
end;
SizeOf(SmallRec)=24, как и должно быть, а
SizeOf(BigRec)=32.
Т.е. каждое следующая переменная выравнивается
по 8 байтной границе.
2. При работе с Packed производительность падает.
3. Для наилучшего быстродействия необходимо обойтичь без Packed,
причем переменные должны быть перечислены, начиная с наибольших, т.е.
Double,Sizngle,Byte.
Ну, Вы поняли.
Отдельная история с Extended.
Т.к. он 10 байтный, то использовать их оптимально попарно.
Если переменная находится по разные стороны границы,
что обеспечивает, например, Packed, то при обращении к ней мы получаем двойную задержку.
AlexanderMS (2006-06-12 19:27:00) [6]Спасибо.
tButton (2006-06-12 19:24:00) [7]
> Packed?
насколько я помню статью из хелпа
операции с packed record осуществляются быстрее
и эти самые пакеты можно присваивать друг другу, просто рекорды нельзя
а вообще - F1 тебе поможет =)