Справочник функций и процедур Delphi: $A

  Навигация по первой букве:

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

  Навигация по категории:

Compiler directives, Directives, Keywords / Types, Variables, Constants / Functions, Procedures

  Реклама:

 

$A
Деректива компилятора
Определяет данные будут выровнены или запакованы unit
  
1 {$A-}
2 {$A+}

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


Copyright © 2004-2016 Delphi Sources (источник – "DelphiBasics.ru")
 


Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook