Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c