Ada Programming/Attributes/'Size
Description
[edit | edit source]R'Size is a representation attribute used to get the number of bits of an object or type:
- When applied to an object, 'Size yields the actual number of bits allocated to store the object.
- When applied to a subtype, 'Size yields the smallest n such that all values fit in the range 0 .. 2n-1 for only positive values, else -2n-1 .. 2n-1-1.
The 'Size attribute may also be used in an attribute definition clause to set the size for a first subtype. In special cases, it is even possible to force a biased representation by using a smaller value than the n above.
Examples
[edit | edit source]This subtype allows a biased representation with only three bits because it comprises only eight values:
type
Tis
range
1000 .. 1007;for
T'Sizeuse
3;
Without the size clause, T'Size would return 10 because 210-1 = 1023.
with
Ada.Text_IO;procedure
Attributes_Sizeis
package
T_IOrenames
Ada.Text_IO;package
I_IOis
new
Ada.Text_IO.Integer_IO (Integer); A_Boolean :constant
Boolean := True;begin
T_IO.Put ("Size of Boolean type = "); -- An enumeration with I_IO.Put (Boolean'Size); -- 2 values fits into T_IO.New_Line; -- 1 bit. T_IO.Put ("Size of Boolean Object = "); -- it is more efficient I_IO.Put (A_Boolean'Size); -- to store a boolean T_IO.New_Line; -- as an entire byteend
Attributes_Size;
The output with GNAT 10.2.0 will be:
Size of Boolean type = 1 Size of Boolean Object = 8
Try it yourself and see how your compiler does.
The value of Size can also be specified using an attribute definition clause. For example, the following declarations specify a C99 compatible bool:
type
Boolis
new
Boolean;for
Bool'Sizeuse
Interfaces.C.int'Size;
Incorrect usages
[edit | edit source]A common Ada programming mistake is to assume that specifying 'Size for a type T forces the compiler to allocate exactly this number of bits for objects of this type. This is not true. The specified T'Size will force the compiler to use this size for components in packed arrays and records and in Unchecked_Conversion, but the compiler is still free to allocate more bits for stand-alone objects.
Use 'Size on the object itself to force the object to the specified value.
See also
[edit | edit source]Wikibook
[edit | edit source]- Ada Programming
- Ada Programming/Attributes
- Ada Programming/Attributes/'Component Size
- Ada Programming/Attributes/'Max Size In Storage Elements
- Ada Programming/Attributes/'Value Size (implementation defined)
- Ada Programming/Attributes/'Object Size (implementation defined)
Ada 83 Reference Manual
[edit | edit source]Ada 95 Reference Manual
[edit | edit source]- 13.3: Operational and Representation Attributes [Annotated]
- Annex K: Language-Defined Attributes [Annotated]
Ada 2005 Reference Manual
[edit | edit source]- 13.3: Operational and Representation Attributes [Annotated]
- Annex K: Language-Defined Attributes [Annotated]