13.2 Packed Types
This Reference Manual output has not been verified, and may contain omissions or errors. Report any problems on the tracking issue
[The Pack aspect having the value True specifies that storage minimization should be the main criterion when selecting the representation of a composite type.]
Language Design Principles
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_definitionshall 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.
record_representation_clause, a Component_Size clause, or a Size clause should be used instead of, or in addition to, the Pack aspect.
This paragraph was deleted.
The 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_clausethat 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.