迭代不同的积分类型

时间:2010-08-13 10:22:18

标签: optimization for-loop

如果我使用例如,它会有什么不同吗? shortchar类型的变量而不是int作为for-loop初始值设定项?

for (int i = 0; i < 10; ++i) {}

for (short i = 0; i < 10; ++i) {}

for (char i = 0; i < 10; ++i) {}

或者也许没有区别?也许我让事情变得更糟,效率降低了?使用不同类型可以节省内存并提高速度吗?我不确定,但我认为++运算符可能需要扩展类型,因此:减慢执行速度。

1 个答案:

答案 0 :(得分:1)

如果您迭代的范围符合您选择的类型,那么您应该关注它并没有任何区别。性能方面,当迭代变量的大小与平台的本机整数大小相同时,您可能会获得最佳结果,但任何体面的编译器都会优化它以使用它。在托管平台(例如C#或Java)上,您在编译时不了解目标平台,并且JIT编译器基本上可以针对其运行的任何平台进行优化。

您唯一需要注意的是当您在循环内使用循环计数器进行其他操作时;更改类型可能会改变这些事情的执行方式,直到(至少在C ++中)可以调用函数或方法的不同重载,因为循环变量具有不同的类型。例如,当您通过C ++流输出循环变量时,如下所示:cout << i << endl;。类似地,循环变量的类型可以感染包含它的隐式类型的(子)表达式,并导致数值计算中的隐藏溢出,例如:int j = i * i;