Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  

форум программистов

Основы Delphi
$A
Деректива компилятора
Определяет данные будут выровнены или запакованы unit
  
1 {$A-}
2 {$A+}
Описание
Директива компилятора $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
 


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика



Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки? Slurm подготовили для вас особенный продукт!





форум программистов


© Форум Delphi  |  Форум Pascal   |  Блог программистов   |  Исходники Delphi   |  Автор сайта  |  Ссылки   |  Английская версия