c ++ - 什么是uint_fast32_t以及为什么要使用它来代替常规int和uint32_t?

因此uint_fast32_t:ed原始数据类型的原因是抽象低级表示并使其更容易理解(typedef而不是uint32_t类型,即8字节)。

但是,有uint_fast32_ttypedef具有相同的typedef。将使用" fast" 版本使程序更快?

Amumu asked 2019-08-11T11:54:53Z
4个解决方案
112 votes
  • 某些平台上的uint32_t可能只有16位。 它可能不适合您的应用程序。
  • uint32_t不保证存在。 它是一个可选的typedef,如果它具有正好为32位的无符号整数类型,则实现必须提供。 例如,有些字节为9位字节,因此它们没有uint_fast32_t
  • uint_fast32_t清楚地表明了你的意图:它是一种至少32位的类型,从性能的角度来看是最好的。 实际上,uint32_t可能是64位长。 它取决于实施。

...有uint_fast32_tuint32_t具有相同的typedef ...

你所看到的不是标准。 这是一个特定的实现(BlackBerry)。 因此,您无法从那里推断出uint_fast32_t始终与uint32_t相同。

也可以看看:

  • 标准委员会关心的异域架构。

  • 我基于观点的C和C ++中整数类型的实用主义观点。

ybungalobill answered 2019-08-11T11:55:50Z
33 votes

不同之处在于它们的准确性和可用性。

这里的文件说:

无符号整数类型,宽度分别为8,16,32和64位(仅当实现直接支持该类型时提供):

uint_fast32_t

最快的无符号无符号整数类型,宽度分别至少为8,16,32和64位

uint_fast32_t

所以差别非常明显uint_fast32_t是一个具有uint32_t位的类型,并且只有在具有正好32位的类型时才能提供它,然后它可以将类型定义为uint_fast32_t.这意味着,uint32_t可以或者 可能无法使用。

另一方面,uint_fast32_t是具有至少32位的类型,这也意味着,如果实现可以将typedef uint32_t设置为uint_fast32_t,如果它提供uint32_t。如果它没有提供uint32_t,那么uint_fast32_t可以是typedef 任何至少有32位的类型。

Nawaz answered 2019-08-11T11:57:08Z
2 votes

当您在程序中使用short时,可以访问一组表示整数的不同方法。

uint_fast * _t类型只是定义了表示给定位数的最快类型。

这样考虑:你定义一个short类型的变量,并在程序中多次使用它,这是完全有效的。 但是,您正在使用的系统可以更快地使用类型为int的值。通过将变量定义为类型uint_fast*t,计算机只选择可以使用的最有效的表示。

如果这些表示之间没有差异,那么系统会选择它想要的任何一个,并在整个过程中始终如一地使用它。

Harley Sugarman answered 2019-08-11T11:57:59Z
0 votes

请注意,快速版本可能大于32位。 虽然fast int可以很好地适应寄存器并且可以对齐等等:但是,它会使用更多的内存。 如果您有大量的这些数组,由于更多的内存缓存命中和带宽,您的程序将会变慢。

我不认为现代CPUS将受益于fast_int32,因为通常在加载指令期间可以发生32到64位的符号扩展以及存在“本地”的概念。 更快的整数格式是老式的。

Gil Colgate answered 2019-08-11T11:58:36Z
translate from https://stackoverflow.com:/questions/8500677/what-is-uint-fast32-t-and-why-should-it-be-used-instead-of-the-regular-int-and-u