参见英文答案 >
What is the difference between intXX_t and int_fastXX_t?4个
两者有什么区别?我知道无论环境如何,int32_t都是32位,但正如它的名字暗示它的速度快,int_fast32_t与int32_t相比要快多少?如果它明显更快,那么为什么呢?
两者有什么区别?我知道无论环境如何,int32_t都是32位,但正如它的名字暗示它的速度快,int_fast32_t与int32_t相比要快多少?如果它明显更快,那么为什么呢?
解决方法
C是根据理想化的抽象机器指定的.但是,真实世界的硬件具有语言标准未捕获的行为特征. _fast类型是类型别名,允许每个平台指定对硬件“方便”的类型.
例如,如果你有一个8位整数数组并希望单独改变每个整数,那么在当代桌面机器上这将是相当低效的,因为它们的加载操作通常要填充整个处理器寄存器,即32或64位宽(“机器字”).因此,浪费了大量加载的数据,更重要的是,您无法并行化两个相邻数组元素的加载和存储,因为它们存在于同一个机器字中,因此需要按顺序进行加载 – 修改 – 存储.
如果可行,_fast类型通常与机器字一样宽.也就是说,它们可能比您需要的更宽,因此消耗更多内存(因此更难以缓存!),但您的硬件可能能够更快地访问它们.但这完全取决于使用模式. (例如,一个int_fast8_t数组可能是一个机器字数组,修改这样一个数组的紧密循环可能会有很大的好处.)
找出它是否有所作为的唯一方法是比较!