$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 — Ущільнює складні типи даних у мінімальний обсяг пам'яті.
