什么是快速整数?什么定义了整数的速度?

时间:2017-09-27 11:12:40

标签: c++ performance c++11

我不是C ++专家,但我开始通过www.learncpp.com学习,这很棒btw,我建议任何新的c ++学习者和本主题:

http://www.learncpp.com/cpp-tutorial/24a-fixed-width-integers/

提到以下内容:

  

快速类型(int_fast#_t)为您提供一个宽度至少为#bits的最快类型的整数(其中#= 8,16,32或64)。例如,int_fast32_t将为您提供至少32位的最快整数类型。

最快的整数类型是什么意思?什么定义了速度?

我假设并非所有整数都以相同的方式访问,有些更容易访问,但我需要知道什么可能导致访问速度?

我在一个问题中读过:

  

在某些处理器上,如果变量存储在较长的寄存器中,则编译器可能必须添加额外的代码以丢弃任何额外的位。例如,如果uint16_t x;存储在ARM7-TDMI上的32位寄存器中,代码为x ++;可能需要评估为x =((x + 1)<&lt; 16)&gt;&gt; 16);.在该平台的编译器上,uint_fast16_t很可能被定义为uint32_t的同义词以避免这种情况。

是什么让这更快?在任何一种情况下,32位都将在寄存器级别中循环。

2 个答案:

答案 0 :(得分:8)

某些64位计算机使用64位作为所有内容,因此在32位空间中进行数学计算需要额外费用(例如,必须模拟无符号溢出)。在这样的机器上,int_fast32_t可以是64位。类似地,对于某些32位机器 - int_fast8_t可能是32位。

x86-64在这里并没有真正受到影响 - 它保留了8位,16位和32位指令,因此编译器只能说&#34;对这些寄存器进行8位数学运算&#34;寄存器更宽,这并不重要。如果您在商品台式机或服务器上进行编程,您可能不需要关心&#34;快速&#34;整数类型。

答案 1 :(得分:0)

我认为“快速”的概念归结为编译器的构建方式。一个好的编译器知道它正在生成代码的CPU架构。如果是这种情况,编译器会知道寄存器的大小以及将进行最终计算或数据移动的单位。考虑到所有这些因素,那些C / C ++数据类型允许您选择一个至少具有特定大小的整数(可以保存8,16,32或64位整数),这个整数在实际情况下也是“快速的” CPU使用的类型

我敢打赌,在大多数情况下,这种“快速”类型不会比拥有该位数的常规类型更快,但“快速”类型使您能够获得在较大寄存器优于较小寄存器的情况下所有可能的性能,都能够保持所需的位数。

我还打赌,这种“快速”类型的交易可能是它会比同样的常规类型更大。即你交易速度与规模。