Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

Отличие Packed Record от просто Record.   Найти похожие ветки 

 
AlexanderMS ©   (2006-06-12 19:22) [0]

В чём заключается отличие типа Packed Record от простого Record"а? Зачем нужен Packed?


 
tButton ©   (2006-06-12 19:24) [1]


> Packed?

насколько я помню статью из хелпа
операции с packed record осуществляются быстрее
и эти самые пакеты можно присваивать друг другу, просто рекорды нельзя
а вообще - F1 тебе поможет =)


 
AlexanderMS ©   (2006-06-12 19:27) [2]

Спасибо.


 
begin...end ©   (2006-06-12 19:38) [3]

> tButton ©   (12.06.06 19:24) [1]

Последняя строка Вашего сообщения абсолютно верна. Чего нельзя сказать об остальных.


 
Rial ©   (2006-06-12 19:38) [4]


> 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, то при обращении к ней мы получаем двойную задержку.


 
Piter ©   (2006-06-12 19:44) [5]

Иными словами, Packed структура занимает меньше места в памяти, но работа с ней происходит медленнее.

Отдельно - это передача структур между модулями (DLL и прочее), когда происходит "передача" структуры между кодами, сгенерированными вообще разными компиляторами. Тогда обычно используют Packed по умолчанию.


 
Dmitrij_K   (2006-06-12 19:44) [6]

Из книги Бакнелл.Фундаментальные алгоритмы Delphi
стр. 32 (257КБ) http://img506.imageshack.us/img506/6476/alg032resize4gm.jpg
стр. 33 (208КБ) http://img506.imageshack.us/img506/9630/alg033resize3yw.jpg


 
AlexanderMS ©   (2006-06-12 19:57) [7]

Спасибо. А то я сам засомневался: вроде бы раньше с успехом присваивал без packed.



Страницы: 1 вся ветка

Текущий архив: 2006.07.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
2-1150096295
RzCoDer
2006-06-12 11:11
2006.07.02
Ашипка при освобождении DLL


15-1149600382
StriderMan
2006-06-06 17:26
2006.07.02
Как узнать какие модули в uses лишние


15-1149493560
patient
2006-06-05 11:46
2006.07.02
Переход к определенной ветке реестра из командной строки


2-1150357329
Тимофей Юрьевич
2006-06-15 11:42
2006.07.02
глупый вопрос по проекту


2-1150438347
Мурзилка
2006-06-16 10:12
2006.07.02
как пользоваться таймером?