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

2 {$Align On}
Описание
Директива компилятора $Align определяет, выравнивает ли Delphi данные, или он упаковывает данные в наименьшее пространство.

С $Align On (значение по умолчанию), сложные типы данных, такие как записи выравнивают свои элементы по 2, 4 или 8-байтовой границе, соответствующе типу данных. Например, поле Word было бы выровнено по 4-байтовой границе.

С $Align On, значение по умолчанию, Вы можете отменить эту установку с опцией packed для сложных структур данных.

Эти выравнивания гарантируют оптимальную работу доступа.

$Align Off сообщает Delphi об игнорировании выравнивания, и таким образом он упаковывать данные.
Примечания
Примеры неупакованных выравниваний:

Word = 2 байта
LongWord = 4 байта
Single = 4 байта
Double = 8 байтов

$Align эквивалентна $A.

Эта директива может использоваться в пределах вашего кода множество раз.

Значение по умолчанию - $Align On
Похожие команды
$A  Определяет данные будут выровнены или запакованы

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 Off}

  // Объявление распакованной записи
  // Она будет обработана как будто упаковка была включена
  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
 



© Форум Delphi   |  Блог программистов   |  Создание и продвижение сайтов - "Веб сателлит"  |  Ссылки   |  Английская версия