Описание:
Директива компилятора $A определяет, выравнивает
ли Delphi данные, или пакует их в наименьший объем.
С $A+ (по умолчанию), сложные типы данных,
такие как записи, хранят свои элементы, выровненные по 2, 4 или 8-байтовой
границе, соответственно типу данных. Например, поле типа Word будет выровнено по
4-байтовой границе.
С $A+, значением по
умолчанию, вы можете перекрыть эти настройки с помощью опции packed для сложных
типов данных.
Выравнивание обеспечивает
оптимальную скорость доступа.
$A- указывает
Delphi игнорировать выравнивание, и таким образом пакует данные.
Пример кода:
type
// Use the default setting
: $A+
// Declare an unpacked, aligned record
TAlignedRecord = Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
// Declare a packed record
TPackedRecord =
Packed Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
// Set alignment off
{$A-}
// Declare an unpacked record
// This will
get treated as if packed was on
TUnPackedRecord = Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
var
alignedRec : TAlignedRecord;
packedRec :
TPackedRecord;
unPackedRec : TUnPackedRecord;
begin
ShowMessage('Aligned record size =
'+IntToStr(SizeOf(alignedRec)));
ShowMessage('Packed record
size = '+IntToStr(SizeOf(packedRec)));
ShowMessage('UnPacked
record size = '+IntToStr(SizeOf(unPackedRec)));
end;
Результат выполнения:
Aligned record size = 20
Packed record size = 14
UnPacked record size = 14