Описание |
Директива компилятора $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
|
|