Форум: "Начинающим";
Текущий архив: 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.005 c