5.1.2. 基本数据类型

本节介绍了如何在 ARM C 和 C++ 中实现基本数据类型。

基本数据类型的大小和对齐

Table 5.2 列出了基本数据类型的大小和自然对齐。

Table 5.2. 数据类型的大小和对齐 

类型 大小(位) 自然对齐(字节)
char 8 1   (字节对齐)
short 16 2   (半字对齐)
int 32 4   (字对齐)
long 32 4   (字对齐)
long long 64 8   (双字对齐)
float 32 4   (字对齐)
double 64 8   (双字对齐)
long double 64 8   (双字对齐)
所有指针 32 4   (字对齐)
bool(仅适用于 C++) 8 1   (字节对齐)
_Bool(仅适用于 C[1] 8 1   (字节对齐)
wchar_t(仅适用于 C++) 16 2   (半字对齐)

[1] 可以使用 stdbool.h 在 C 中定义 bool 宏。

类型对齐因上下文而异:

  • 局部变量通常保存在寄存器中,但在局部变量溢出到堆栈中时,它们始终是字对齐的。 例如,溢出的局部变量 char 以 4 为边界对齐。

  • 压缩类型的自然对齐边界为 1。

有关详细信息,请参阅结构、联合、枚举和位域

整数

整数以 2 的补码形式表示。 在小端模式下,long long 的低字位于低位地址;在大端模式下,其低字位于高位地址。

浮点

浮点量以 IEEE 格式进行存储:

  • float 值由 IEEE 单精度值表示

  • doublelongdouble 值由 IEEE 双精度值表示。

对于 doublelongdouble 量:在大端模式下,包含符号、指数和尾数的最有效部分的字存储在低机器地址中;在小端模式下,则存储在高机器地址中。 有关详细信息,请参阅浮点类型运算

数组和指针

以下说明适用于 C 和 C++ 中的所有指向对象的指针,而不适用于指向成员的指针:

  • 相邻字节的地址相差 1。

  • NULL 扩展为值 0。

  • 整数和指针之间的类型转换不会改变表示形式。

  • 对于指向函数的指针和指向数据的指针之间的类型转换,编译器将会发出警告。

  • size_t 类型被定义为 unsigned int

  • ptrdiff_t 类型被定义为 signed int

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential