Nonstatic attribute Descriptor_Size
returns the size in bits of the
descriptor allocated for a type. The result is non-zero only for unconstrained
array types and the returned value is of type universal integer. In GNAT, an
array descriptor contains bounds information and is located immediately before
the first element of the array.
type Unconstr_Array is array (Short_Short_Integer range <>) of Positive; Put_Line ("Descriptor size = " & Unconstr_Array'Descriptor_Size'Img);
The attribute takes into account any padding due to the alignment of the
component type. In the example above, the descriptor contains two values
of type Short_Short_Integer
representing the low and high bound. But,
since Positive
has an alignment of 4, the size of the descriptor is
2 * Short_Short_Integer'Size
rounded up to the next multiple of 32,
which yields a size of 32 bits, i.e. including 16 bits of padding.