Вниз
Скачать: CL | DM;

record и packed record   Найти похожие ветки 

 
Alek_1   (2004-05-07 14:18) [0]

Чем отличается record от packed record?
И в каких случаях лучше использовть record, а в каких packed record?


 
Семен Сорокин ©   (2004-05-07 14:27) [1]

From Help:

By default, the values in a structured type are aligned on word or double-word boundaries for faster access. When you declare a structured type, you can include the reserved word packed to implement compressed data storage. For example,

type TNumbers = packed array[1..100] of Real;

Using packed slows data access and, in the case of a character array, affects type compatibility (for more information, see Memory management).


 
han_malign ©   (2004-05-07 14:45) [2]

на пальцах:
Project Options->Compiler->Record field alignment(1,2,4(,8{D7}))
или {$A+}, {$A-}, {$A1}, {$A2}, {$A4}, or {$A8}

type
  Rec = record
     b: byte;
     w: word;
  end;

для выравнивания 1, данные побайтово лежат - bww
2 - b0ww
4 - b000ww00
8 - b0000000ww000000
а теперь представь, что в одном модуле(скажем в dll) выравниване 1, в другом 4 - в лучшем случае будет неправильно прочитано w, в худшем(при записи)  ты вылезешь за границу структуры(неявное прямое приведение), запорешь "чужие" данные, и наверняка словишь AV...

packed - описывает структуру с выравниванием 1, независимо от опций компилятора

З.Ы.(в C это делается #pragma pack()/push/pop)


 
Alek_1   (2004-05-07 16:55) [3]

спасибо!


 
WebErr ©   (2004-05-07 17:00) [4]


> han_malign ©   (07.05.04 14:45) [2]

ИМХО самое грамотное объяснение, данное когда-либо по этому вопросу. :)


 
pasha_golub ©   (2004-05-07 17:03) [5]

Грамотное без спору, но если бы я его не знал, то не понял был. :-)

han_malign ©   (07.05.04 14:45) [2]
Respect



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.022 c
14-1083157523
FlankerX
2004-04-28 17:05
2004.05.23
Microsoft vs Borland


7-1081868399
RyDmi
2004-04-13 18:59
2004.05.23
Работа с LPT


14-1083307248
MBo
2004-04-30 10:40
2004.05.23
Пятница... Опять задачки ;)


1-1083922607
BFG9k
2004-05-07 13:36
2004.05.23
TPageProducer


1-1083927840
NovyeVasyuki
2004-05-07 15:04
2004.05.23
Запускаю RAR через CreateProcess. Как свернуть окно MS-DOS ?




   Наверх