int_fast32_t和int_fast16_t是int的typedef。它应该如何使用?

问题描述 投票:-1回答:2

stdint.h定义:

int32_t,int_least32_t,int_fast16_t和int_fast32_t只是int数据类型

它们究竟有何不同,它们有何用处?我特别对“int_fast16_t和int_fast32_t”的部分感到困惑。在默认的int下实现16位和32位。它应该如何工作?

c++ c
2个回答
1
投票

标题implementation清楚地提到了原因

为了适应缺少类型正好8163264位宽的目标,此实现采用级联重新定义的方法,将__int_leastN_t重新定义为连续较小的精确宽度类型。

进一步检查这个description(最小宽度整数类型)的部分是有帮助的: -

标准规定这些宽度大于或等于N,并且没有具有相同符号的较小类型具有N或更多位。例如,如果系统仅提供uint32_tuint64_t,则uint_least16_t必须等同于uint32_t


0
投票

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位,就是这样。

© www.soinside.com 2019 - 2024. All rights reserved.