Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правила записи record, ...


tymofy ©   (2007-09-17 22:50:00) 

Как надо записывать подобные записи в лпне удобства, стандартов, ...

TFileHeader = record
 FileIdent: Byte;
 FileSize: DWord;
 FileChecksum: Word;
end;


или

TFileHeader = record
 Ident: Byte;
 Size: DWord;
 Checksum: Word;
end;


Как стоит записывать?


evvcom   (2007-09-19 12:59:00) [1]


> Anatoly Podgoretsky ©   (19.09.07 11:08) [19]

:) Ну да, проблема прокладки между рулем и сиденьем :)


Anatoly Podgoretsky   (2007-09-19 11:08:00) [2]

> evvcom  (19.09.2007 08:44:18)  [18]

То есть руки и чем думаем


evvcom   (2007-09-19 08:44:00) [3]


> Slym ©   (19.09.07 04:47) [16]
> именно с записью... вот сохранит он эту запись в файл, перекомпилируется
> и считать из файла эту запись уже не сможет данные (запись)
> потеряна :)

Да, смайлик тут действительно к месту. Но описанная тобой проблема - это все же проблема с использованием и непониманием того, что пишешь, а не с самой записью.


Slym   (2007-09-19 04:55:00) [4]

в добавок: при задачах, в которых необходима работа с большими и "тучными" массивами записей оптимизация размера записи (путем packed или опциями {$Aх}) не на последнем месте: 8 это не 12 для наглядности: 66мб это не 100мб памяти
к массивам (стат) также приминимы правила выравнивания - массивы тоже могут быть packed, что также может отразиться на объеме занятой памяти


Slym   (2007-09-19 04:47:00) [5]

Виктор007   (18.09.07 12:42) [14]
TFileHeader = record
FileIdent: Byte;
FileSize: DWord;
FileChecksum: Word;
end;

теоретически размер записи = SizeOf(Byte)+SizeOf(DWord)+SizeOf(Word)=1+4+2= 7
но фактически:
- при компиляции структуры при опции {$A4} - получаем размер в 12 байт
- при компиляции структуры при опции {$A2} - получаем размер в 8 байт
- при компиляции структуры packed - получаем размер в 7 байт
- кроме того размер зависит от последовательности полей в записи (от их размера). запись эквивалентная твоей, но размером при {$A4} не 12, а 8 байт!:
TFileHeader = record
FileSize: DWord;
FileChecksum: Word;
FileIdent: Byte;
end;


evvcom ©   (18.09.07 10:40) [12]
Проблемы возможны не с самой записью, а с методами ее использования

именно с записью... вот сохранит он эту запись в файл, перекомпилируется и считать из файла эту запись уже не сможет данные (запись) потеряна :)

DrPass ©   (18.09.07 11:16) [13]
Тупо писать packed для всех записей - не решение проблемы, а извращение

Зачем для всех? только для "экспортируемых" записей: сохраняемых в файл, передаваемых между независимыми модулями...


Anatoly Podgoretsky   (2007-09-18 12:48:00) [6]

Проблемы при передаче в другую программу


Виктор007   (2007-09-18 12:42:00) [7]

> с такой записью в дальнейшем возможны проблемы и корень
> проблемы Align fields

Опишите пожалуйста подробнее что это значит?


DrPass   (2007-09-18 11:16:00) [8]


> с такой записью в дальнейшем возможны проблемы и корень
> проблемы Align fields
> При различных опциях компилятора получишь различный, несовместимый
> код

Ну наверное ж просто надо думать, когда пишешь программу. Тупо писать packed для всех записей - не решение проблемы, а извращение.


evvcom   (2007-09-18 10:40:00) [9]


> с такой записью в дальнейшем возможны проблемы и корень
> проблемы Align fields

Проблемы возможны не с самой записью, а с методами ее использования. А раз так, то проблемы возможны где угодно и запись тут не при чем. А насчет Align ты все же верно подметил, я бы сделал так:
TFileHeader = record
 Size: DWord;
 Ident: Byte;
 Checksum: Word;
end;


clickmaker   (2007-09-18 09:57:00) [10]

лучше второй вариант. Первый напоминает речь заики


Slym   (2007-09-18 05:29:00) [11]

tymofy   (17.09.07 22:50)
Оба варианта не катят :) даже не морфология и синтаксис, а содержание: с такой записью в дальнейшем возможны проблемы и корень проблемы Align fields
При различных опциях компилятора получишь различный, несовместимый код.
Избежать этого можно используя TFileHeader = packedrecord


Германн   (2007-09-18 01:35:00) [12]


> Правила записи record, ...
>
> tymofy   (17.09.07 22:50)
>
> Как надо записывать подобные записи в планеудобства, стандартов,
>  ...

Да нет таких правил. Кроме обычной разумной понятности.

P.S.
Сергей М. ©
Что-то тебя со вчерашнего вечера "понесло". Даже на простые "очепятки" вскидываешься". (Почти как ЦЧ в своих последних сообщениях на сём форуме :)


Сергей М.   (2007-09-17 23:55:00) [13]


> Kostafey ©   (17.09.07 23:43) [7]


)
Телепатор тут не выдержит никакой нагрузки


Kostafey   (2007-09-17 23:43:00) [14]

> Чудесно.
> Ну а какое отношение все это имеет к "лпне удобства" ?)

Телепатор на зарядку поставили? :)

в лпне удобства -> в плане удобства


Сергей М.   (2007-09-17 23:41:00) [15]


> Kostafey ©   (17.09.07 23:37) [5]


Чудесно.

Ну а какое отношение все это имеет к "лпне удобства" ?)


Kostafey   (2007-09-17 23:37:00) [16]

> Ты не торопись - в Орешнике места всем хватит

Я уже много раз пытался туда попасть.
Вот вроде уж все продумаещь, чтобы и не глупо очевидно,
что нарочно мол в орешник, и чтоб смешно.

Не получилось...

Что до > [3] Kostafey ©   (17.09.07 23:25)
то я слишком кратко сказал.
Смысл в том, чтобы если у нас например имеется несколько
size-оф (FileSize, RecordSize, etc), то возможно имеет смысл
выделить другой класс.


Сергей М.   (2007-09-17 23:30:00) [17]


> Kostafey ©   (17.09.07 23:25) [3]


Ты не торопись - в Орешнике места всем хватит


Kostafey   (2007-09-17 23:25:00) [18]

> Как надо записывать подобные записи

так

> TFileHeader = record
> Ident: Byte;
> Size: DWord;
> Checksum: Word;
> end;

если этих size-оф несколько возможно имеет смысл делать
еще один объект, ИМХО конечно.


Сергей М.   (2007-09-17 23:22:00) [19]


> Как надо записывать подобные записи в лпне удобства


Их не надо "записывать", их надо прямиком в Орешник в кач-ве рассады.


DrPass   (2007-09-17 22:53:00) [20]


> Как надо записывать подобные записи в лпне удобства, стандартов

Всем бы твои проблемы...


Наверх

Титульная страница Поиск, карта сайта Написать письмо