Basic data types in ARM C and C++
Describes the basic data types implemented in ARM C and C++:
Size and alignment of basic data types
The following table gives the size and natural alignment of the basic data types.
Table 11-2 Size and alignment of data types
|Type||Size in bits||Natural alignment in bytes|
|All pointers||32||4 (word-aligned)|
Type alignment varies according to the context:
Local variables are usually kept in registers, but when local variables spill onto the stack, they are always word-aligned. For example, a spilled local
charvariable has an alignment of 4.
The natural alignment of a packed type is 1.
Integers are represented in two's complement form. The low
word of a
long long is at the low address in
little-endian mode, and at the high address in big-endian mode.
Floating-point quantities are stored in IEEE format:
floatvalues are represented by IEEE single-precision values
doublevalues are represented by IEEE double-precision values.
long double quantities
the word containing the sign, the exponent, and the most significant
part of the mantissa is stored with the lower machine address in
big-endian mode and at the higher address in little-endian mode.
Arrays and pointers
The following statements apply to all pointers to objects in C and C++, except pointers to members:
Adjacent bytes have addresses that differ by one.
NULLexpands to the value 0.
Casting between integers and pointers results in no change of representation.
The compiler warns of casts between pointers to functions and pointers to data.
size_tis defined as
ptrdiff_tis defined as
you define the
bool macro in C.