Справочник Ada 2005
13.2 Директива Pack
Директива Pack указывает, что основным критерием при выборе представления составного типа должно быть минимизация занимаемого места.
Синтаксис
Директива Pack имеет следующий вид:
pragma Pack(first_subtype_local_name);
Правила легальности
Идентификатор first_subtype_local_name директивы Pack должен обозначать составной подтип.
Статическая семантика
Директива Pack определяет аспект упаковки представления; тип (или расширяющая часть) называется упакованным. Для расширения типа родительская часть упаковывается так же, как и родительский тип, а директива Pack вызывает упаковку только расширяющей части.
Рекомендации для реализации
Если тип упакован, реализация должна стремиться к минимизации памяти, выделяемой для объектов этого типа, возможно, в ущерб скорости доступа к компонентам, с учетом разумной сложности вычислений адресов.
Если упакованный тип содержит компонент, который не является типом по ссылке и не имеет части, на которую ссылаются несколько переменных, такой компонент не обязан выравниваться согласно выравниванию его подтипа; в частности, он не обязан размещаться на границе элемента памяти.
Рекомендуемый уровень поддержки директивы Pack:
- Для упакованного типа-записи компоненты должны быть упакованы максимально плотно, с учетом размеров подтипов компонентов и любых применимых к типу record_representation_clause; реализация может, но не обязана, переупорядочивать компоненты или пересекать границы выровненных слов для улучшения упаковки. Компонент, размер которого больше размера слова, может быть размещен на целочисленном количестве слов.
- Для упакованного типа-массива, если размер подтипа компонента меньше или равен размеру слова, и Component_Size не указан для типа, Component_Size должен быть меньше или равен размеру подтипа компонента, округлённому до ближайшего кратного размеру слова.