各平台 unsigned int 的字节数对比
unsigned int 的字节长度不由unsigned int 定义的变量 在 电脑的 64 位系统中 和 32 位 cortex-m0 和 8 位的 51 单片机 分别是用多少个字节表示的编写代码的电脑位数决定,而是由目标运行平台的架构 + 对应编译器的标准约定决定,以下是三类平台主流编译器的默认实现:
表格
| 目标平台 | 架构位数 | 主流编译器 | unsigned int 字节数 |
位数 |
|---|---|---|---|---|
| 64 位电脑(x86_64) | 64 位 | GCC / Clang / MSVC | 4 字节 | 32 位 |
| 32 位 Cortex-M0 | 32 位 | arm-none-eabi-gcc / Keil MDK / IAR | 4 字节 | 32 位 |
| 8 位 51 单片机 | 8 位 | Keil C51 / SDCC | 2 字节 | 16 位 |
说明
-
64 位电脑系统 无论是 Windows(LLP64 模型)、Linux 还是 macOS(LP64 模型),主流编译器都保持
int为 32 位(4 字节),64 位仅体现在指针、long等类型上,这是行业通用惯例。 -
32 位 Cortex-M0 Cortex-M0 属于 ARM 32 位架构,遵循 ARM AAPCS 调用约定,标准
int固定为 32 位(4 字节),同系列所有 Cortex-M3/M4/M7 均遵循此规则。 -
8 位 51 单片机 51 是 8 位内核,为了兼顾运行效率与数据范围,Keil C51 等编译器将
int定义为 16 位(2 字节);如果需要 32 位无符号整型,需使用unsigned long(占 4 字节)。 -
C 标准背景 C 语言标准仅规定
int的最小取值范围不小于 16 位(即至少 2 字节),具体字节数由编译器和目标架构共同定义,上述为各领域的工业界默认标准。