Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
ВнизПравила записи record, ... Найти похожие ветки
← →
tymofy (2007-09-17 22:50) [0]Как надо записывать подобные записи в лпне удобства, стандартов, ...
TFileHeader = record
FileIdent: Byte;
FileSize: DWord;
FileChecksum: Word;
end;
илиTFileHeader = record
Ident: Byte;
Size: DWord;
Checksum: Word;
end;
Как стоит записывать?
← →
DrPass © (2007-09-17 22:53) [1]
> Как надо записывать подобные записи в лпне удобства, стандартов
Всем бы твои проблемы...
← →
Сергей М. © (2007-09-17 23:22) [2]
> Как надо записывать подобные записи в лпне удобства
Их не надо "записывать", их надо прямиком в Орешник в кач-ве рассады.
← →
Kostafey © (2007-09-17 23:25) [3]> Как надо записывать подобные записи
так
> TFileHeader = record
> Ident: Byte;
> Size: DWord;
> Checksum: Word;
> end;
если этих size-оф несколько возможно имеет смысл делать
еще один объект, ИМХО конечно.
← →
Сергей М. © (2007-09-17 23:30) [4]
> Kostafey © (17.09.07 23:25) [3]
Ты не торопись - в Орешнике места всем хватит
← →
Kostafey © (2007-09-17 23:37) [5]> Ты не торопись - в Орешнике места всем хватит
Я уже много раз пытался туда попасть.
Вот вроде уж все продумаещь, чтобы и не глупо очевидно,
что нарочно мол в орешник, и чтоб смешно.
Не получилось...
Что до> [3] Kostafey © (17.09.07 23:25)
то я слишком кратко сказал.
Смысл в том, чтобы если у нас например имеется несколько
size-оф (FileSize, RecordSize, etc), то возможно имеет смысл
выделить другой класс.
← →
Сергей М. © (2007-09-17 23:41) [6]
> Kostafey © (17.09.07 23:37) [5]
Чудесно.
Ну а какое отношение все это имеет к "лпне удобства" ?)
← →
Kostafey © (2007-09-17 23:43) [7]> Чудесно.
> Ну а какое отношение все это имеет к "лпне удобства" ?)
Телепатор на зарядку поставили? :)
в лпне удобства -> в плане удобства
← →
Сергей М. © (2007-09-17 23:55) [8]
> Kostafey © (17.09.07 23:43) [7]
)
Телепатор тут не выдержит никакой нагрузки
← →
Германн © (2007-09-18 01:35) [9]
> Правила записи record, ...
>
> tymofy (17.09.07 22:50)
>
> Как надо записывать подобные записи в плане удобства, стандартов,
> ...
Да нет таких правил. Кроме обычной разумной понятности.
P.S.
Сергей М. ©
Что-то тебя со вчерашнего вечера "понесло". Даже на простые "очепятки" вскидываешься". (Почти как ЦЧ в своих последних сообщениях на сём форуме :)
← →
Slym © (2007-09-18 05:29) [10]tymofy (17.09.07 22:50)
Оба варианта не катят :) даже не морфология и синтаксис, а содержание: с такой записью в дальнейшем возможны проблемы и корень проблемы Align fields
При различных опциях компилятора получишь различный, несовместимый код.
Избежать этого можно используя TFileHeader = packed record
← →
clickmaker © (2007-09-18 09:57) [11]лучше второй вариант. Первый напоминает речь заики
← →
evvcom © (2007-09-18 10:40) [12]
> с такой записью в дальнейшем возможны проблемы и корень
> проблемы Align fields
Проблемы возможны не с самой записью, а с методами ее использования. А раз так, то проблемы возможны где угодно и запись тут не при чем. А насчет Align ты все же верно подметил, я бы сделал так:TFileHeader = record
Size: DWord;
Ident: Byte;
Checksum: Word;
end;
← →
DrPass © (2007-09-18 11:16) [13]
> с такой записью в дальнейшем возможны проблемы и корень
> проблемы Align fields
> При различных опциях компилятора получишь различный, несовместимый
> код
Ну наверное ж просто надо думать, когда пишешь программу. Тупо писать packed для всех записей - не решение проблемы, а извращение.
← →
Виктор007 (2007-09-18 12:42) [14]> с такой записью в дальнейшем возможны проблемы и корень
> проблемы Align fields
Опишите пожалуйста подробнее что это значит?
← →
Anatoly Podgoretsky © (2007-09-18 12:48) [15]Проблемы при передаче в другую программу
← →
Slym © (2007-09-19 04:47) [16]Виктор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 для всех записей - не решение проблемы, а извращение
Зачем для всех? только для "экспортируемых" записей: сохраняемых в файл, передаваемых между независимыми модулями...
← →
Slym © (2007-09-19 04:55) [17]в добавок: при задачах, в которых необходима работа с большими и "тучными" массивами записей оптимизация размера записи (путем packed или опциями {$Aх}) не на последнем месте: 8 это не 12 для наглядности: 66мб это не 100мб памяти
к массивам (стат) также приминимы правила выравнивания - массивы тоже могут быть packed, что также может отразиться на объеме занятой памяти
← →
evvcom © (2007-09-19 08:44) [18]
> Slym © (19.09.07 04:47) [16]
> именно с записью... вот сохранит он эту запись в файл, перекомпилируется
> и считать из файла эту запись уже не сможет данные (запись)
> потеряна :)
Да, смайлик тут действительно к месту. Но описанная тобой проблема - это все же проблема с использованием и непониманием того, что пишешь, а не с самой записью.
← →
Anatoly Podgoretsky © (2007-09-19 11:08) [19]> evvcom (19.09.2007 08:44:18) [18]
То есть руки и чем думаем
← →
evvcom © (2007-09-19 12:59) [20]
> Anatoly Podgoretsky © (19.09.07 11:08) [19]
:) Ну да, проблема прокладки между рулем и сиденьем :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.036 c