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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
14-1116171303
Nic87
2005-05-15 19:35
2005.06.06
Новый дизайн на worlds3d


3-1114835348
dEd
2005-04-30 08:29
2005.06.06
ADO + целостность данных


14-1116271689
dazfx
2005-05-16 23:28
2005.06.06
Программа для сканирования сети


1-1116600766
juice
2005-05-20 18:52
2005.06.06
Имя экземпляра класса


8-1108743803
pasha L
2005-02-18 19:23
2005.06.06
Вставка gif а





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский