我最近发现了标准fastest类型的存在,主要是int_fast32_tint_fast64_t.

我总是被告知,为了在主流架构上正常使用,最好使用classic 的int&long,它应该始终适合处理器的默认读取能力,从而避免无用的数字转换.

C99标准§7.18.1.3p2中规定:

"类型定义文件名int_fast N_t指定宽度至少为N的最快有符号整数类型.类型定义文件名称uint_fast N_t指定宽度至少为N的最快无符号整数类型."

在§7.18.1.3p1中也有一段关于它的引用:

"指定的类型并不能保证在所有情况下都是最快的;如果实现没有明确的理由选择一种类型而不是另一种类型,它只会选择满足符号性和宽度要求的整数类型."

我不清楚fastest到底意味着什么.我不明白什么时候该用,什么时候不该用.

我在谷歌上搜索了一下,发现大约有open,source,projects个人改变了部分功能,但不是全部.他们没有真正解释为什么要更改一部分代码和only部分代码.

你知道当int_fastXX_t比classic 的快really时,具体的情况/用法是什么吗?

推荐答案

在C99标准中,7.18.1.3是最快的最小宽度整数类型.

(7.18.1.3p1)"在所有至少具有指定宽度的整数类型中,以下每个类型都指定一个通常最快的整数类型."

225)"不能保证指定的类型在所有目的上都是最快的;如果实现没有明确的理由选择一种类型而不是另一种类型,它将简单地选择一些满足符号和宽度要求的整数类型."

(7.18.1.3p2)"类型定义名称int_fast N_t指定宽度至少为N的最快有符号整数类型.类型定义名称uint_fast N_t指定最快的无符号整数 键入宽度至少为N的文字."

The types int_fastN_tuint_fastN_t are counterparts to the exact-width integer types intN_tuintN_t. The implementation guarantees that they take at least N bits, but the implementation can take more bits if it can perform optimization using larger types; it just guarantees they take at least N bits.

例如,在32位机器上,uint_fast16_t可以定义为unsigned int而不是unsigned short,因为使用机器字大小的类型更有效.

Another reason of their existence is the exact-width integer types are optional in C but the fastest minimum-width integer types 和 the minimum-width integer types (int_leastN_tuint_leastN_t) are required.

C++相关问答推荐

从 C 文件调用 C++ 标准头文件 (cstdint)

使用R的`.C`接口处理读/写文件

为什么将输出写入正在缓冲的管道

使用 .* 宽度说明符调用 sprintf 时出现奇怪的警告

在链表中动态存储数据的问题

如果两个数字是相同的 0,则在 C++ 和 Root 中设置 0 条件

fork() - 多次调用子代码(相同的 PID)

HAL_UART_Transmit_IT 如何在 STM32F091VB 上管理串行发送数据

在数组中查找与数组均值相同的对

如何在数组中打印二进制数?

&> 重定向是如何在 UNIX shell 中实现的?

DirectX11 与多视频适配器 (GPU) PC

在 Win32 上双重转换为 unsigned int 被截断为 2,147,483,648

是否有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域中?

程序是 32 位还是 64 位意味着什么?

gcc中有128位整数吗?

使用模数的 C 加法

Linux 上的异​​步信号处理程序是如何执行的?

什么是 C17,语言做了哪些改变?

编译器中的 8 位布尔值.对它们的操作效率低吗?