Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2009, 19:09   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Record / Packed Record

Сабж в том, чем они отличаются и имеет ли смысл всегда ставить Packed?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 10.11.2009, 19:25   #2
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Ключевое слово Packed говорит Delphi минимизировать память, взятую определенным объектом.
Обычно, сложные типы данных, такие как записи, имеют свои элементы по 2, 4 или 8 байта, соответствующие типам данных. Например, поле Word было бы 4-байтовое.
Записи также дополняются, для гарантии, что они закончены, 4-х байтовой границей.
Упаковка отменяет это, сжимая данные в наименьшую память, хотя с последующим уменьшенным доступом выполнения.
Вадим Буренков вне форума Ответить с цитированием
Старый 10.11.2009, 19:26   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

упакованная структура не выравнивается...
то есть
Код:
type
 A1=record
  b,b1:byte;
  i:integer;
 end;
 P1=packed record
  b,b1:byte;
  i:integer;
 end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ShowMessage(IntTostr(SizeOf(A1)));//8
 ShowMessage(IntTostr(SizeOf(P1)));//6
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.11.2009, 19:39   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Упаковка отменяет это, сжимая данные в наименьшую память,
Это хорошо. Люблю экономию.
Цитата:
хотя с последующим уменьшенным доступом выполнения.
А насчет этого поподробней, пожалуйста.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 10.11.2009, 21:39   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Народ, чето я вот читаю тему и не могу понять следующее:
вот тут
Код:
 P1=packed record
  b,b1:byte;
  i:integer;
 end;
Ясно почему размер структуры равен 6 байт(1+1+4=6)

А почему тогда вот тут размер структуры НЕ 6 байт?
Код:
 A1=record
  b,b1:byte;
  i:integer;
 end;
Вроде бы тоже (1+1+4=6).

Объясните кто то доступно...как можно понятнее...пожалуйста.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 10.11.2009, 21:44   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
А почему тогда вот тут размер структуры НЕ 6 байт?
граница структуры выравнивается до 8

то есть два байта зря...
вот насчет времени доступа к упакованным данным я точно не знаю...
но оно поидее больше...так как процессору не удобно юзать такие данные(предпологгаю я)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 10.11.2009 в 21:47.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.11.2009, 01:24   #7
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Да, так уж устроен процессор, к невыровненным данным время доступа больше.
пыщь
JTG вне форума Ответить с цитированием
Старый 11.11.2009, 10:43   #8
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Обращение к 32битному невыровненному целому может занимать до двух раз больше времени. Для выровненных 32битных целых гарантируется атомарность чтения и записи, то есть, мы не получим пол–старого значения, пол–нового. К невыровненным это не относится.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
my Record subsonic Общие вопросы Delphi 5 09.02.2009 15:20
Задачв на RECORD n1ce > Kuzia Паскаль, Turbo Pascal, PascalABC.NET 6 28.01.2009 19:44
record/file potion Паскаль, Turbo Pascal, PascalABC.NET 3 10.05.2008 20:15
Работа с типом Record TheNovice Помощь студентам 4 28.02.2007 17:52