gpt4 book ai didi

c++ - 不同位数平台上 int_fastN_t 的正确位数是多少?

转载 作者:太空宇宙 更新时间:2023-11-04 11:27:22 25 4
gpt4 key购买 nike

众所周知,stdint.h 通过 int_leastN_tint_fastN_t 为某些 N 位类型提供数据和代码经济变体, 分别。我想它是根据不同 CPU 的 word 大小来实现的。
话虽这么说,据我所知,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 位的角度来看,我的说法是否正确?

最佳答案

不,除了它们必须至少为 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:

Each of the following types designates an integer type that is usually fastest to operate with among all integer types that have at least the specified width.

The typedef name int_fastN_t designates the fastest signed integer type with a width of at least N. The typedef name uint_fastN_t designates the fastest unsigned integer type with a width of at least N.

The following types are required:
int_fast8_t uint_fast8_t
int_fast16_t uint_fast16_t
int_fast32_t uint_fast32_t
int_fast64_t uint_fast64_t
All other types of this form are optional.

只有 C 标准提供了保证;除此之外的任何东西都是不可移植的。

关于c++ - 不同位数平台上 int_fastN_t 的正确位数是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com