$Align — определяет, данные будут выровнены или запакованы.
Значение
- {$Align Off}
- {$Align On}
Описание
Директива компилятора $Align - определяет, выравнивает ли Delphi данные, или он упаковывает эти данные в наименьшее пространство.
С $Align On (значение по умолчанию), сложные типы данных, такие как записи выравнивают свои элементы по 2, 4 или 8-байтовой границе, соответствующе типу данных. Например, поле Word было бы выровнено по 4-байтовой границе.
С $Align On, значение по умолчанию, Вы можете отменить эту установку с опцией packed для сложных структур данных.
Эти выравнивания гарантируют оптимальную работу доступа.
$Align Off сообщает Delphi об игнорировании выравнивания, и таким образом он упаковывает данные.
Пример кода: Упаковка записи для уменьшения памяти
type
// Используйте настройки по умолчанию : $A+
// Объявление неупакованной, выровненной записи
TAlignedRecord = Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
// Объявление упакованный записи
TPackedRecord = Packed Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
// Установка выравниваний в Off (выкл.)
{$A Off}
// Объявление распакованной записи
// Она будет обработана как будто упаковка была включена
TUnPackedRecord = Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
var
alignedRec : TAlignedRecord;
packedRec : TPackedRecord;
unPackedRec : TUnPackedRecord;
begin
ShowMessage('Размер выровненной записи = '+IntToStr(SizeOf(alignedRec)));
ShowMessage('Размер упакованной записи = '+IntToStr(SizeOf(packedRec)));
ShowMessage('Размер неупакованной записи = '+IntToStr(SizeOf(unPackedRec)));
end;
Результат выполнения программы
Размер выровненной записи = 20
Размер упакованной записи = 14
Размер неупакованной записи = 14
Примечания
Примеры неупакованных выравниваний:
Word = 2 байта
LongWord = 4 байта
Single = 4 байта
Double = 8 байтов
$Align эквивалентна $A.
Эта директива может использоваться в пределах вашего кода множество раз.
Значение по умолчанию - $Align On
Похожие команды
$A - Определяет данные будут выровнены или запакованы.
Packed - Уплотняет сложные типы данных в минимальный объём памяти.
