处理器最方便的整数类型

时间:2012-02-02 14:57:47

标签: c++ performance types word promotions

根据我所听到的,整数值不是处理器的字数在修改时会被提升(使用+ , - ,&等)。 long类型应该是单词大小。在我的编译器上,int 32位long 64位

这是否意味着long int 更高效尽管需要更多内存?

还有一件事,复合运算符还能提升价值吗?那么增量减少运算符呢?

4 个答案:

答案 0 :(得分:2)

没关系,这不是你可以控制的。选择足够宽的最窄类型来表示您需要的值。这是您在任何情况下都能做到的最好的事情。

语言保证操作的结果是正确的,编译器将选择最有效的路径来找到它可以找到的结果。这可能涉及在某个阶段更改整数大小,或者可能不会。

处理器可以进行自己的内部转换。再次,不改变结果。再一次,它不在你的手中。

答案 1 :(得分:1)

任何人都很难给你一个直截了当的答案。在这种情况下,您可以做的最好的事情就是为自己分析和看待。

但除非你使用这些数字进行数百万次操作,否则我怀疑哪个更快更重要。只能在。

之后首先编写可读代码,配置文件和优化

我还听说拥有if (int)而非if (bool)的速度更快,因为bool会升级为int(反直觉,我知道),但是没有人为了表现而声明int而不是bool。 (除非,可能在分析后)

答案 2 :(得分:1)

根据原则,普通int应该是“快速,正常使用整数”,而long,当不同时,可以表示“扩展范围,但可能是慢”。

实际发生的事情很大程度上取决于您正在使用的平台。

在我使用的几个微控制器上int为16位,long为32位,long上的操作需要多个处理器指令。在“经典”32位x86上,longint通常是相同的,因此根本没有区别。在x86_64上,根据可移植性问题,long可能是32位或64位;至于“执行操作的指令计数”它们是相同的,但是如果你必须在内存中读取/存储大整数数组(32位整数可能表现更好,因为更适合缓存),增加的大小就很重要(和可能你可以做很多考虑,优化通常是违反直觉的,尤其是x86上的

所以,长话短说:不要过度思考这个问题,如果你需要一个保证快速工作的“正常”整数,并且它的范围适合你的应用程序,只需使用int。如果您需要最小保证大小,请查看typedef的{​​{1}}(除了给出精确大小的整数之外,还提供“具有此最小大小的最快整数”)。

但与往常一样,通常的规则适用:如果您遇到性能问题,请先优化。

答案 3 :(得分:0)

  

这是否意味着长期比int更有效,尽管需要更多内存?

这完全取决于您的计算机。没有一种普遍优化的完美整数类型。如果它对性能至关重要,您需要使用某些分析工具进行检查。如果它对性能不是很重要,你就不应该关心。