根据我所听到的,整数值不是处理器的字数在修改时会被提升(使用+ , - ,&等)。 long
类型应该是单词大小。在我的编译器上,int
32位而long
64位。
这是否意味着long
比int
更高效尽管需要更多内存?
还有一件事,复合运算符还能提升价值吗?那么增量和减少运算符呢?
答案 0 :(得分:2)
没关系,这不是你可以控制的。选择足够宽的最窄类型来表示您需要的值。这是您在任何情况下都能做到的最好的事情。
语言保证操作的结果是正确的,编译器将选择最有效的路径来找到它可以找到的结果。这可能涉及在某个阶段更改整数大小,或者可能不会。
处理器可以进行自己的内部转换。再次,不改变结果。再一次,它不在你的手中。
答案 1 :(得分:1)
任何人都很难给你一个直截了当的答案。在这种情况下,您可以做的最好的事情就是为自己分析和看待。
但除非你使用这些数字进行数百万次操作,否则我怀疑哪个更快更重要。只能在。
之后首先编写可读代码,配置文件和优化我还听说拥有if (int)
而非if (bool)
的速度更快,因为bool
会升级为int
(反直觉,我知道),但是没有人为了表现而声明int
而不是bool
。 (除非,可能在分析后)
答案 2 :(得分:1)
根据原则,普通int
应该是“快速,正常使用整数”,而long
,当不同时,可以表示“扩展范围,但可能是慢”。
实际发生的事情很大程度上取决于您正在使用的平台。
在我使用的几个微控制器上int
为16位,long
为32位,long
上的操作需要多个处理器指令。在“经典”32位x86上,long
和int
通常是相同的,因此根本没有区别。在x86_64上,根据可移植性问题,long
可能是32位或64位;至于“执行操作的指令计数”它们是相同的,但是如果你必须在内存中读取/存储大整数数组(32位整数可能表现更好,因为更适合缓存),增加的大小就很重要(和可能你可以做很多考虑,优化通常是违反直觉的,尤其是x86上的。
所以,长话短说:不要过度思考这个问题,如果你需要一个保证快速工作的“正常”整数,并且它的范围适合你的应用程序,只需使用int
。如果您需要最小保证大小,请查看typedef
的{{1}}(除了给出精确大小的整数之外,还提供“具有此最小大小的最快整数”)。
但与往常一样,通常的规则适用:如果您遇到性能问题,请先优化。
答案 3 :(得分:0)
这是否意味着长期比int更有效,尽管需要更多内存?
这完全取决于您的计算机。没有一种普遍优化的完美整数类型。如果它对性能至关重要,您需要使用某些分析工具进行检查。如果它对性能不是很重要,你就不应该关心。