RM 13 2 6-8 Packed Types (GNAT Reference Manual)

### 6.17 RM 13.2(6-8): Packed Types ¶

> “If a type is packed, then the implementation should try to minimize storage allocated to objects of the type, possibly at the expense of speed of accessing components, subject to reasonable complexity in addressing calculations.

> The recommended level of support pragma `Pack` is:

> For a packed record type, the components should be packed as tightly as possible subject to the Sizes of the component subtypes, and subject to any ‘record_representation_clause’ that applies to the type; the implementation may, but need not, reorder components or cross aligned word boundaries to improve the packing. A component whose `Size` is greater than the word size may be allocated an integral number of words.”

Followed. Tight packing of arrays is supported for all component sizes up to 64-bits. If the array component size is 1 (that is to say, if the component is a boolean type or an enumeration type with two values) then values of the type are implicitly initialized to zero. This happens both for objects of the packed type, and for objects that have a subcomponent of the packed type.