在不同位度平台上int_fastN_t的正确位大小是多少?

What's the proper bitsize for int_fastN_t on different bitness platforms?

本文关键字:多少 fastN 平台 int      更新时间:2023-10-16
众所周知

stdint.h分别按int_leastN_tint_fastN_t为某些N位类型提供了数据和代码经济变体。我想它考虑到word不同 CPU 的大小。
话虽如此,据我所知,64 位 CPU 处理 64 位数据的速度比低位数据快,无论"更少"是什么。从逻辑上讲,64 位整数比 32 位快,当涉及到 64 位 CPU 时,尽可能快地使用 16 位数据,int_fast16_t INT_FAST16_MIN定义为 INT64_MIN 而不是 stdint.h 中指定的INT32_MIN
对于 32 位 CPU 来说,类似的情况int_fast8_t,但问题是char正好是 8 位,无论如何,所以不可能有最低版本。

我知道当前的规范必须同时容纳 64 位和 32 位处理器,但从理论上讲,从 64 位 pov 开始,我的说法是否正确?

不,除了它们必须至少N位宽的明显要求之外,没有一般的理论基础来确定应该如何定义[u]int_fastN_t

对于"32位"或"64位"CPU是什么,实际上没有确切的定义。该数字可能指通用 CPU 寄存器的大小、地址的大小、某些内部总线的宽度或营销部门的心血来潮。有许多CPU的"位数"一直很模糊;某些 CPU 在某些方面是 8 位的,在其他方面是 16 位的,或者 16 位和 32 位。有关示例,请参阅 x86 和 68k CPU 系列的演变。

完全有可能拥有一个具有 64 位通用寄存

器的 CPU,该寄存器还具有比 64 位算术更快地执行 32 位算术的指令。就此而言,64 位加法可能比 32 位加法快,32 位除法可能比 64 位除法快。

就我个人而言,我满足于让编译器和运行时库实现者担心它,并以最合理的方式为目标体系结构定义[u]intfastN_t类型。如果我需要在运行时知道实际大小,则始终有sizeof运算符。如果我在编写代码时需要知道实际大小,我可能不应该首先使用[u]int_fastN_t

以下是 C 标准对[u]int_leastN_t类型的说明 (N1570 7.20.1.3:

以下每种类型都指定一个整数类型,该类型通常为 在所有整数类型中操作速度最快,这些整数类型至少具有 指定宽度。

typedef 名称int_fastN_t指定最快的有符号整数 宽度至少为 N 的类型。typedef 名称uint_fastN_t 指定宽度至少为 N .

需要以下类型:
int_fast8_t uint_fast8_t
int_fast16_t uint_fast16_t
int_fast32_t uint_fast32_t
int_fast64_t uint_fast64_t
此表单的所有其他类型的都是可选的。

C标准提供了唯一的保证;除此之外的任何内容都是不可移植的。