![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Packed record. absolute. file r/w. [D5, Win95/98]
3d[Power] © (2002-01-11 01:22:00)Этот вопрос частично освещался, но всеже хотелось подробнее узнать о packed record. О записи и чтении packed record"a в файл. Как записывать последовательность packed record"oв (в нефиксированном порядке). И наконец, что такое absolue. В хэлпе непонятно :(.
Merlin (2002-01-12 00:57:00) [1]исправлено
3d[Power] (2002-01-12 00:50:00) [2]test
panov (2002-01-11 18:09:00) [3]Пиши Мерлину delphi@mastak.ru
3d[Power] (2002-01-11 18:02:00) [4]2 panov, почему же мне © выдают?
panov (2002-01-11 13:21:00) [5]Не используй спецсимволы и пробелы в нике.
3d[Power] (2002-01-11 12:51:00) [6]ВОПРОС МОДЕРАТОРАМ: Как я с чужого компа смог от моего имени сообщение добавить? Я же зареген
3d[Power] (2002-01-11 12:44:00) [7]Сорри, за траблы с ником, я на чужом компе..
2 SoftOne, я просто никогда не изучал packed record.
FX_Demon (2002-01-11 12:43:00) [8]2 SoftOne, я просто никогда не изучал packed record.
Romkin (2002-01-11 11:00:00) [9]Packed record :-))
Как, думаю, многим известно, Дельфя стараются выравнивать переменные по границе n байт, для ускорения доступа. При включенной опции {$ALIGN ON}, или "Aligned record fields" (по умолчанию), поля записей также выравниваются по адресу, нацело делящемуся на 1,2,4,8 (зависит от типа поля, для real, например - 2) в результате например record a,b,c,d: byte end; займет не 4 байта, а 16. При указании packed выравнивание не применяется, и размер записи равен сумме размеров полей. И все! Просто при записи/чтении в поток/файл как правило используют сжатые записи, чтобы пустого места не было, и была независимость от выравнивания
MegaVolt (2002-01-11 10:05:00) [10]Packed record это такая запись которая лежит в памяти последовательно на сколько я это понимаю и она позволяет записывать и читать в/из файла с помошью например потока:
F:=TStreamFile.Create;
F.Write(Packed_Record,SizeOf(T_Packed_Record));
Я писал по памяти так что мгут быть небольшие синтаксические ошибки.
В таком типе записи могут быть только переменные фиксированной длинны т.е.
String нельзя
String[25] можно.
Mbo (2002-01-11 07:59:00) [11]тут надо пример
var a:array[0..3] of byte;
b:integer absolute a;
и а и b располагаются по одному адресу,
сделав
b:=0;
получаем обнуление массива
Владислав (2002-01-11 07:53:00) [12]Или вернее располагаться по указанному адресу.
gek (2002-01-11 07:44:00) [13]absolue указывает, что указанная переменная будет записана по абсолютному адресу т.е. именно по адресу который указан и ни по какому другому
SoftOne (2002-01-11 01:29:00) [14]> 3d[Power] ©
Не понял - это шутка? Твой НИК достаточно известен здесь как НЕ ЛАМЕРСКИЙ.