我做了一些搜索并理解了这些数据类型之间的区别。然而,令我困惑的是,导致差异的原因。当我访问stdin.h
库时,我发现int8_t
和int_fast8_t
的typedef为signed char
。那么,它是一样的吧?但是,为什么int_fast8_t
在速度方面总是更快或等于int8_t
?
答案 0 :(得分:1)
显然,根据这些定义,无论您使用何种平台,int8_t
和int_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_t
和int_fast8_t
之间实际上并不存在差异,并且它们是相同的类型并不罕见。