stdint.h定义:
int32_t,int_least32_t,int_fast16_t和int_fast32_t只是int数据类型
它们究竟有何不同,它们有何用处?我特别对“int_fast16_t和int_fast32_t”的部分感到困惑。在默认的int下实现16位和32位。它应该如何工作?
标题implementation清楚地提到了原因
为了适应缺少类型正好
8
,16
,32
或64
位宽的目标,此实现采用级联重新定义的方法,将__int_leastN_t
重新定义为连续较小的精确宽度类型。
进一步检查这个description(最小宽度整数类型)的部分是有帮助的: -
标准规定这些宽度大于或等于
N
,并且没有具有相同符号的较小类型具有N
或更多位。例如,如果系统仅提供uint32_t
和uint64_t
,则uint_least16_t
必须等同于uint32_t
。
int16_t是一个整数,取16位。
intfast16_t是一个依赖于平台的实现。在32位架构上,int16_t未对齐且效率低,因为它必须在加载期间首先在32位寄存器中重新对齐。 intfast16_t是32位内存对齐并占用更多内存,但效率更高。
intleast16_t也是一个依赖于平台的实现。它是一种打包实现,具有内存效率,但在考虑性能时效率低下。
类似于int32_t,intfast32_t和intleast32_t的情况。
你的可能是32位架构。这就是为什么intfast16_t,int32_t,intfast32_t和intleast32_t都被定义为int,所有都是32位对齐的。 intfast16_t需要32位,就是这样。