13.2 Packed Types
The Pack aspect having the value True specifies that
storage minimization should be the main criterion when selecting the
representation of a composite type.
For a full type declaration
of a composite type, the following language-defined representation aspect
may be specified:
The type of aspect Pack is Boolean. When aspect Pack is True for a type,
the type (or the extension part) is said to be packed
. For a type
extension, the parent part is packed as for the parent type, and specifying
Pack causes packing only of the extension part.
If directly specified, the aspect_definition
shall be a static expression. If not specified (including by inheritance),
the aspect is False.
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.
This paragraph was
recommended level of support for the Pack aspect is:
Any component of a packed type that is of a by-reference
type, that is specified as independently addressable, or that contains
an aliased part, shall be aligned according to the alignment of its subtype.
For a packed record type, the components should
be packed as tightly as possible subject to the above alignment requirements,
the Sizes of the component subtypes, and any record_representation_clause
that applies to the type; the implementation is allowed to 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.
For a packed array type, if the Size of the component
subtype is less than or equal to the word size, Component_Size should
be less than or equal to the Size of the component subtype, rounded up
to the nearest factor of the word size, unless this would violate the
above alignment requirements.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe