Копия викизеркало

Это зеркало вики с pascal.chat. Правка, история и вход — там.

Packed/ru

Deutsch · English · Русский

Уплотнение структур

Зарезервированное слово packed сообщает компилятору по возможности использовать минимальное количество байтов памяти для составных типов данных. Без указания packed компилятор может вставить дополнительные неиспользуемые байты между элементами для выравнивания расположения элементов в памяти кратно машинному слову процессора, чтобы ускорить доступ.

Кроме экономии памяти, упаковка элементов позволяет избежать несовместимости структур:

Warning: Следует учитывать, что некоторые базовые типы (Integer, Cardinal, Real, Pointer) на разных системах могут иметь разный размер. Поэтому для обмена данными с другими системами используйте только базовые типы с фиксированным размером.

Директива {$PACKRECORDS n} или {$ALIGN n} задает размер в байтах для выравнивания элементов структур, для которых не указан определитель packed.

{$PACKRECORDS 1} эквивалентно указанию packed.

Пример:\

pascal
  type TPArray = packed array [1..9] of LongInt;
  type TPClass = packed class  ... end;
  type TPObject = packed object ... end;
  type TPRecord = packed record ... end;

Битовое уплотнение

Директива {$BITPACKING ON|OFF} указывает компилятору, что он должен уплотнять элементы до минимального размера в битах. Если значение ON, то компилятор будет уплотнять побитно структуры, имеющие ключевое слово packed.

Ключевое слово bitpacked указывает, что элементы составного типа должны уплотнятся побитно независимо от значения директивы {$BITPACKING}.

Пример:\

pascal
type TSomeBitLevelStructure = bitpacked record
  SingleBit: Boolean;
  OneBit: 0..1;
  TwoBits: 0..3;
  FourBits: 0..15;
  EightBits: 0..255
end;

Смотри также


From the Free Pascal wiki, page "Packed/ru", as it stood on 2020-02-23 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Версия 1, последнее изменение: WikiArchive, .