Data Type Storage

Table 6-2 lists register and memory storage for various data types:

Table 6-2 Data Representation in Registers and Memory

Data Type Register Storage Memory Storage
char, signed char Bits 0-7 of register(1) 8 bits aligned to 8-bit boundary
unsigned char, bool Bits 0-7 of register 8 bits aligned to 8-bit boundary
short, signed short Bits 0-15 of register(1) 16 bits aligned to 16-bit (halfword) boundary
unsigned short, wchar_t Bits 0-15 of register 16 bits aligned to 16-bit (halfword) boundary
int, signed int Bits 0-31 of register 32 bits aligned to 32-bit (word) boundary
unsigned int Bits 0-31 of register 32 bits aligned to 32-bit (word) boundary
long, signed long Bits 0-31 of register 32 bits aligned to 32-bit (word) boundary
unsigned long Bits 0-31 of register 32 bits aligned to 32-bit (word) boundary
long long Even/odd register pair 64 bits aligned to 32-bit (word) boundary(2)
unsigned long long Even/odd register pair 64 bits aligned to 32-bit (word) boundary(2)
float Bits 0-31 of register 32 bits aligned to 32-bit (word) boundary
double Register pair 64 bits aligned to 32-bit (word) boundary(2)
long double Register pair 64 bits aligned to 32-bit (word) boundary(2)
struct Members are stored as their individual types require. Members are stored as their individual types require; aligned according to the member with the most restrictive alignment requirement.
array Members are stored as their individual types require. Members are stored as their individual types require; aligned to 32-bit (word) boundary. All arrays inside a structure are aligned according to the type of each element in the array.
pointer to data member Bits 0-31 of register 32 bits aligned to 32-bit (word) boundary
pointer to member function Components stored as their individual types require 64 bits aligned to 32-bit (word) boundary
Negative values are sign-extended to bit 31.
64-bit data is aligned on a 64-bit boundary.

For details about the size of an enum type, see Table 5-2.