Главная страница
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.041 c
1-1116912661
tomas
2005-05-24 09:31
2005.06.06
Использование TcxDBLookupComboBox (Express DBEditors 4)


3-1114666775
Sergun
2005-04-28 09:39
2005.06.06
сортировка записей в DbGridEh


5-1086366940
BestMaster
2004-06-04 20:35
2005.06.06
TreeView + Tedit/TMemo


1-1116481740
Olya
2005-05-19 09:49
2005.06.06
Работа со строками


1-1116689999
Max_005
2005-05-21 19:39
2005.06.06
inherited