76
12.2. Внутреннее представление данных
12.2.2. Упакованные переменные
В UniPascal-е упаковка оказывает существенное влияние на представление
переменных, массивов и структур. Упаковка предпринимается, только если она явным
образом указана и если возможно ее выполнение.
Тип Т называется упакованным, если указана его упаковка и среди его элементов
есть по крайной мере один упаковаемый.
Тип T называется упаковаемым, если справедливо одно из следующих условий:
*
Тип T ординальный (целый, логический, символьный, перечисляемый или
диапазонный) и его минимальное и максимальное (и оба одновременно)
значения принадлежать одному из следующих двух диапазонов [0..255] или
[-128..127];
*
Тип T - составной тип и все его элементы (если это массивовый тип) или все
его поля (если это записный тип) упакованы и упаковаемые. При том для
типа указана упаковка.
Из этих двух определений следует, что тип может быть упакованным, но
неупаковаемым. Понятие неупаковаемости вводится для облегчения объяснения, что
некоторые массивы могут, а другие не могут быть упакованными, а так же и для
облегчения способа упаковки записей. Если элементы массива неупаковаемыми, то
указание на упаковку (зарезервированное слово PACKED) игнорируется.
Примеры:
packed array [0..5] of char;
упакованный и упаковаемый массив;
packed array [0..5] of integer;
неупакованный массив;
packed record x, y: shortcard; end;
упаковаемая (и упакованная) запись, т.е. ее можно использовать как
элемент упакованного массива (или записи);
packed record x, y: shortcard; i: integer; end;
упакованная, но неупаковаемая запись, т.е. если она будеть использована
как элемент массива, то указание на упаковку (PACKED) будет
игнорировано для этого массива.
Кроме того, упаковаемость оказывает существенное влияние на способ
упаковки записей. Упаковаемые поля записи могут начинаться с границы байта, пока
неупаковаемые поля должны начинаться с начала слова (выравнивание на границе
слова).Рассмотрим упаковаемость отдельных стандартных типов.
Перечисляемый тип
Значения констант перечисляемого типа представляются как целые числа
диапазона 0..N-1, где N - число констант перечисляемого типа. Обычно представление
занимает один байт и тогда тип упаковаемый, так как число констант редко превышает
256.
иогический тип
Для представления значений 0 и 1 достаточен один бит, но используется байт. Тип
упаковаемый.
<<  <  GO  >  >>

Вернуться к началу сайта