Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.06;
Скачать: CL | DM;

Вниз

Как учесть выравнивание в записи при переносе даных?   Найти похожие ветки 

 
Erik1 ©   (2005-05-20 17:05) [0]

Собственно говоря мне надо переместить первых два поля записи в Integer.
 RElement = record
   State: TState;
   TableID: TEnumTables;
   ID, Parent_ID: TID;
   TyypID: TID;
...
 End;
Разумеется хочется седать красиво.
Var
Buf: Integer;
Begin
Move(Element, Buf, SizeOf(State)+SizeOf(TableID));
А при востановлении Move(Buf, Element, SizeOf(State)+SizeOf(TableID));
Но я чтото неуверен, небудет ошибок за счет выравнования?


 
REA   (2005-05-20 17:16) [1]

Вариант 1: packed record
Вариант 2:
TStateID = Record
  State: TState;
  TableID: TEnumTables;
End; и :=


 
Alexander Panov ©   (2005-05-20 17:20) [2]

Move(Element, Buf, SizeOf(TState)+SizeOf(TEnumTables));

При условии, что TState и TEnumTables - не динамические массивы +
[1] REA   (20.05.05 17:16)
Вариант 1: packed record


 
Erik1 ©   (2005-05-20 17:44) [3]

TEnumTables = (enumTeenused, enumSeadmed, enumLeping);
 TState = (stNone, stDelete, stInsert, stModify, stReInit, stError, stInit);
Так, что они прекрасно должны поместится в Integer и  SizeOf(State) = SizeOf(TState) это верно для всех простых типов.

К сожалению packed record нехотелось использовать, поэтому и задал вопрос по возможности отслеживания выравнивания. Например можно перенести два поля по очереди
Var
   Ptr: Pointer;
begin
Move(Element.State, Buf, SeofOf(Element.State))
     Ptr := @Buf;
     Inc(Integer(Ptr), SizeOf(Element.State));
Move(Element.TableID, Ptr^, SizeOf(Element.State)+SizeOf(Element.TableID));      

Но это неверное не единственвый вариант?


 
Игорь Шевченко ©   (2005-05-20 17:45) [4]

$Z + F1


 
Erik1 ©   (2005-05-20 17:45) [5]

Конечно SizeOf(Element.State) это лишнее.


 
Erik1 ©   (2005-05-20 17:50) [6]

to Игорь Шевченко
А может быть при $Z1 перечисляемые типы будут еще идти без выравнивания? И я вобще зря волнуюсь?


 
Игорь Шевченко ©   (2005-05-20 17:51) [7]

Erik1 ©   (20.05.05 17:50) [6]


> А может быть при $Z1 перечисляемые типы будут еще идти без
> выравнивания?


Практика - критерий истины. Может быть. В случае packed record - совершенно точно без выравнивания.



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

Текущий архив: 2005.06.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
9-1110556718
VolanD666
2005-03-11 18:58
2005.06.06
Русская душа тянется к ХАЛЯВЕ...


14-1116515290
Alexsandra
2005-05-19 19:08
2005.06.06
Профессия ПРОГРАММИСТ


14-1116316875
stone
2005-05-17 12:01
2005.06.06
«Велик могучим русский языка!»


14-1116503539
VMcL
2005-05-19 15:52
2005.06.06
А что только что в скрипте поменяли,


14-1116416994
alless
2005-05-18 15:49
2005.06.06
Файл .wma