Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.28;
Скачать: [xml.tar.bz2];

Вниз

Dword в Record   Найти похожие ветки 

 
novichek   (2010-01-21 00:59) [0]

TmyRec = record
      b : byte;
      w: word;
      d: Dword;
...
    end;

после записи в файл заметил что после Dword почему-то добавляется байт равный 00.

не подкажите почему?


 
Игорь Шевченко ©   (2010-01-21 01:10) [1]

packed record


 
novichek   (2010-01-21 01:15) [2]

че-то в замешательстве..

даже не байт в конце а и в начале то же..
идет b, w, 00, d, 00, ..
присвоил w=5, стало после w не 00 а 18..

если не лезьт в дебри, обратный процесс чтения с файла будет нормальным?
а если лезть, в двух слова можно про packed record ?


 
Чайник ©   (2010-01-21 01:25) [3]

Обычный  record выравнивается компилятором до word или double-word (кратным 4-м или 8 байтам) добавлением нулей. При packed - соответственно не выравнивается. Borland предупреждает, что доступ к не выравненным (packed) структурам работает медленнее, чем к выравнененным.


 
novichek   (2010-01-21 01:31) [4]

спасибо, вообщем в далеке понятно..
тогда нужно отходить от этого в использовании записи в файл, а то потом запутаться запросто можно..


 
Германн ©   (2010-01-21 01:45) [5]


> Чайник ©   (21.01.10 01:25) [3]
>
> Обычный  record выравнивается компилятором до word или double-
> word (кратным 4-м или 8 байтам)

"Обычный" record выравнивается компилятором тучей разных способов.
Зависит от версии Дельфи.


 
Германн ©   (2010-01-21 01:48) [6]


> novichek   (21.01.10 01:31) [4]
>
> спасибо, вообщем в далеке понятно..
> тогда нужно отходить от этого в использовании записи в файл,
>  а то потом запутаться запросто можно..
>

Прочти справку и пойми её. Потом поймешь, что ответ Игорь Шевченко ©   (21.01.10 01:10) [1] полностью снимает все проблемы записи/чтения твоего файла.


 
Плохиш ©   (2010-01-21 15:36) [7]


> а если лезть, в двух слова можно про packed record ?
>

Пожалуйста

Wenn ein Record-Typ mit dem voreingestellten Status {$A+} deklariert wird und die Deklaration nicht den Modifizierer packed enthält, handelt es sich um einen ungepackten Record-Typ. Die Felder des Records werden so ausgerichtet, dass die CPU möglichst effizient darauf zugreifen kann. Die Ausrichtung hängt von den Typen der einzelnen Felder ab und davon, ob Felder zusammen deklariert werden. Jeder Datentyp besitzt eine implizite Ausrichtungsmaske, die vom Compiler automatisch berechnet wird. Sie kann die Werte 1, 2, 4 oder 8 haben und entspricht dem Byte-Raster, in dem ein Wert dieses Typs für den optimalen Zugriff im Speicher angeordnet werden muss. Die folgende Tabelle enthält die Ausrichtungsmasken für alle Datentypen.

и

Wenn die beiden Felder eine gemeinsame Typspezifikation teilen, werden diese selbst dann gepackt, wenn die Deklaration nicht den Modifizierer packed enthält und der Record-Typ nicht mit dem {$A-}-Status deklariert ist. Betrachten Sie folgende Deklaration:

type
 TMyRecord = record
   A, B: Extended;
   C: Extended;
 end;

A und B werden gepackt (an Byte-Grenzen ausgerichtet), da sie dieselben Typspezifikation verwenden. Der Compiler füllt die Struktur mit unbenutzten Bytes aus, um sicherzustellen, dass C auf einer Quadword-Grenze erscheint.

Wenn ein Record-Typ mit dem Status {$A–} deklariert wird oder die Deklaration den Modifizierer packed enthält, werden die Felder des Records nicht ausgerichtet, sondern einfach an aufeinander folgenden Offsets abgelegt. Die Gesamtgröße eines solchen gepackten Records ergibt sich aus der Größe aller Felder. Da sich die Datenausrichtung ändern kann, bieten sich gepackte Record-Typen für alle Record-Strukturen an, die auf Festplatte geschrieben oder im Speicher an ein Modul übergeben werden sollen, das mit einer anderen Version des Compilers compiliert wird.


 
Игорь Шевченко ©   (2010-01-21 15:54) [8]

Плохиш ©   (21.01.10 15:36) [7]

Наконец-то! :)


 
Anatoly Podgoretsky ©   (2010-01-21 15:56) [9]


> Игорь Шевченко ©   (21.01.10 15:54) [8]

На него вся надежда была, кто еще выписку из справки предоставит?


 
Неважно   (2010-01-21 16:04) [10]

2 Плохиш ©   (21.01.10 15:36) [7]

А на каком это ? Немецкий что-ли ?


 
Плохиш ©   (2010-01-21 16:13) [11]


> Игорь Шевченко ©   (21.01.10 15:54) [8]

Да, я понял, что без справки им никуда :-)

> Anatoly Podgoretsky ©   (21.01.10 15:56) [9]

Вы все злые, один я белый и пушистый :-))

> Неважно   (21.01.10 16:04) [10]

неважно.


 
Anatoly Podgoretsky ©   (2010-01-21 16:19) [12]

> Плохиш  (21.01.2010 16:13:11)  [11]

Так мы же тебя хвалим, а не ругаем!!!


 
Плохиш ©   (2010-01-21 16:31) [13]


> Anatoly Podgoretsky ©   (21.01.10 16:19) [12]
>
> > Плохиш  (21.01.2010 16:13:11)  [11]
>
> Так мы же тебя хвалим, а не ругаем!!!
>

Блин, а я-то размечтался 8-0 ...<щас забанят>


 
Ганя   (2010-01-22 19:42) [14]


> тогда нужно отходить от этого в использовании записи в файл,
>  а то потом запутаться запросто можно..


Достаточно оставить около объявления записи комментарий, в котором указать, почему packed и куда именно пишется



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

Форум: "Начинающим";
Текущий архив: 2010.03.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.004 c
15-1263046404
Алекс555
2010-01-09 17:13
2010.03.28
Кто-то очень много ест .... памяти


15-1263074944
Илья_
2010-01-10 01:09
2010.03.28
Игра FIFA 2010 по сети


2-1264684555
Valior
2010-01-28 16:15
2010.03.28
бд на дельфях


15-1262295022
Юрий
2010-01-01 00:30
2010.03.28
С днем рождения ! 1 января 2010 пятница


2-1264184513
Alexey
2010-01-22 21:21
2010.03.28
ID3 теги и кодировка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский