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 types, 'Size yields the minimum number of bits required to store an object of that type.
Thus, the 'Size of a type might be lower than the 'Size of its objects. This is especially important to note for variant records, where a particular instance of the record may be much larger than the smallest possible record instance.
The 'Size attribute may also be used to set the minimum size in bits used to store a type.
Examples
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
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
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)