Ada Programming/Attributes/'Size
Description
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
This subtype allows a biased representation with only three bits because it comprises only eight values:
typeTisrange1000 .. 1007;forT'Sizeuse3;
Without the size clause, T'Size would return 10 because 210-1 = 1023.
withAda.Text_IO;procedureAttributes_SizeispackageT_IOrenamesAda.Text_IO;packageI_IOisnewAda.Text_IO.Integer_IO (Integer); A_Boolean :constantBoolean := True;beginT_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 byteendAttributes_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:
typeBoolisnewBoolean;forBool'SizeuseInterfaces.C.int'Size;
Incorrect usages
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 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
Wikibook
- 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
Ada 95 Reference Manual
- 13.3: Operational and Representation Attributes [Annotated]
- Annex K: Language-Defined Attributes [Annotated]
Ada 2005 Reference Manual
- 13.3: Operational and Representation Attributes [Annotated]
- Annex K: Language-Defined Attributes [Annotated]