是什么导致int8_t和int_fast8_t不同?

时间:2016-04-09 17:57:08

标签: c++

我做了一些搜索并理解了这些数据类型之间的区别。然而,令我困惑的是,导致差异的原因。当我访问stdin.h库时,我发现int8_tint_fast8_t的typedef为signed char。那么,它是一样的吧?但是,为什么int_fast8_t在速度方面总是更快或等于int8_t

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

fast版本的intN版本保证至少为N位大小,而是处理器可以本地处理的内容。

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

答案 2 :(得分:0)

  

所以,它是一样的,对吧?

是的,关于这个特定的实现,它是。但总的来说,情况并非如此。

  

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

如果两种类型相同,则适用相等的部分。如果实现具有更快的可用性,则类型将不同,int_fast8_t将表现更好(在某种意义上)。 (类型也可能不同,但产生相同的性能,但仍然包含在"更快或相等" 部分的报价中。)

该行的底部,int8_tint_fast8_t之间实际上并不存在差异,并且它们是相同的类型并不罕见。