Неправильно определяется размер...
type THeader = record
BM: Word
BMPSize: LongWord
Reserved1: Word
Reserved2: Word
BMPOffset: LongWord
end;
Должно получиться 14 байт. Но программа упорно заявляет SizeOf (THeader) = 16
Помогите, пожалуйста. Это глюк или так и должно быть, тогда почему.
Это связано с управлением памяти в Delphi. Для таких типов, как записи (и нек. др.) значения выравниваются по границам word и dword для более быстрого доступа. Объяви свой record вот так:
t = record
BM: Word;
BMPSize: LongWord;
Reserved1: Word;
BMPOffset: LongWord;
Reserved2: Word;
end;
и SizeOf (t) будет равно 20! (забавно, правда?).
Этого всего можно избежать, если использовать ключевое слово packed, данные будут сжаты (именно за счёт того, что выравнивания по гранцам word и dword делаться не будет). Якобы из-за этого они могут медленнее работать. Для строковых массивов это может привести к проблемам совместимости. Короче, см. в справке packed и Memory Management.
Вот это круто!! Я даже и не знал. Правда и с проблеиой такой не сталкивался.