0

据我所知,不是处理器字长的整数值在修改它们时会被提升(使用 +、-、& 等)。类型应该是字长。在我的编译器上,是32-bit并且是64-bitlongintlong

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

还有一件事,复合运算符是否也促进了价值观?那么递增递减运算符呢?

4

4 回答 4

2

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

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

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

于 2012-02-02T15:02:31.670 回答
1

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

但除非你用这些数字进行数百万次操作,否则我怀疑哪个更快会很重要。首先编写可读代码,然后进行分析和优化。

我还听说拥有一个if (int)而不是更快,if (bool)因为它bool会被提升为int(违反直觉,我知道),但是没有人为了性能而声明一个int而不是一个。bool(除非,也许,在分析之后)

于 2012-02-02T15:00:57.250 回答
1

原则上, plainint应该是“快速,正常使用的整数”,而long,当不同时,可以表示“扩展范围但可能更慢”。

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

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

所以,长话短说:不要过度考虑这个问题,如果您需要一个保证快速工作的“正常”整数并且它的范围对您的应用程序来说是可以的,只需使用int. 如果您需要最小保证大小,请查看typedefs <stdint.h>(除了为您提供精确大小的整数外,它还提供“具有此最小大小的最快整数”)。

但与往常一样,通常的规则适用:如果您有性能问题首先配置文件,然后优化。

于 2012-02-02T15:09:35.167 回答
0

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

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

于 2012-02-02T15:02:43.113 回答