【问题标题】:What causes int8_t and int_fast8_t to be different?是什么导致 int8_t 和 int_fast8_t 不同?
【发布时间】:2016-04-09 17:57:08
【问题描述】:

我进行了一些搜索并了解了这些数据类型之间的区别。然而,让我感到困惑的是,是什么导致了这种差异。当我转到stdin.h 库时,我看到int8_tint_fast8_t 的typedef 为signed char。所以,是一样的,对吧?但是,为什么int_fast8_t 在速度方面总是更快或等于int8_t

【问题讨论】:

  • 嗯,有数百个stdint.h,我猜他们中的一些对这两个的定义不同。
  • 重新打开;这个问题不是这些类型之间的区别,而是哪里这些区别来自哪里。
  • @PeteBecker 是的。我确实理解他们之间的区别。我试图找出导致这些差异的原因是什么,在哪个过程中?以及如何?

标签: c++


【解决方案1】:

显然,根据这些定义,无论您使用什么平台,int8_tint_fast8_t 都同样快。在某些平台上,大于 8 位的大小可能会更快,在这种情况下,将 int_fast8_t 类型定义为更大的类型是合适的。而在没有 8 位类型的平台上(一些 DSP 将char 定义为 16 位或 32 位,而一些旧系统使用 9 位字节),int8_t 将不存在,但int_fast8_t 将.

【讨论】:

    【解决方案2】:

    intNs 的fast 版本保证至少为N 位大小,而是处理器可以本机处理的东西。

    在 x86 上,匹配可能并不重要,但例如旧的 Alpha 处理器不直接支持 8 位或 16 位类型(至少是旧版本)。所以这个int_fast8_t被定义为32位整数。

    【讨论】:

      【解决方案3】:

      所以,是一样的,对吧?

      是的,在这个特定的实现中,确实如此。但总的来说,情况不一定如此。

      但是,为什么int_fast8_t 在速度方面总是更快或等于int8_t

      如果两种类型相同,则应用相等的部分。如果实现可以使用更快的东西,那么类型将不一样,int_fast8_t 的性能会更好(在某种意义上)。 (类型也可能不同,但产生相同的性能,但这仍然包含在引用的 “更快或等于” 部分。)

      归根结底,int8_tint_fast8_t 之间实际上并没有区别,它们属于同一类型并不罕见。

      【讨论】:

        猜你喜欢
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 2012-04-26
        • 1970-01-01
        • 2015-10-06
        相关资源
        最近更新 更多