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