Директива компилятора $A определяет, выравнивает ли Delphi данные, или он упаковывает данные в наименьшее пространство.
С $A+ (значение по умолчанию), сложные типы данных, такие как записи выровнивают свои элементы по 2, 4 или 8-байтовой границе, соответствующе типу данных. Например, поле Word было бы выровнен по 4-байтовой границе.
С $A+, значение по умолчанию, Вы можете отменить эту установку с опцией packed для сложных структур данных.
Эти выравнивания гарантируют оптимальную работу доступа.
$A- сообщает Delphi об игнорировании выравнивания, и таким образом он упаковывать данные.
Примечания
Примеры неупакованных выравниваний:
Word = 2 байта
LongWord = 4 байта
Single = 4 байта
Double = 8 байтов
$Align эквивалентна $A.
Эта директива может использоваться в пределах вашего кода множество раз.
Значение по умолчанию - $A+
Похожие команды
$Align Определяет данные будут выровнены или запакованы
Packed Уплотняет сложные типы данных в минимальный объём памяти
Пример кода : Упаковка записи для уменьшения памяти
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-} // Объявление распакованной записи //
Она будет обработана как будто упаковка была включена
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