假设有一个循环,其中有一个名为counter的整数变量,需要在每次迭代时将其重置为0。这两个版本中哪一个会更有效率?
版本-1:
for (int i = 0; i < 10; i++) {
int counter = 0;
if (something()) counter++;
}版本-2:
int counter;
for (int i = 0; i < 10; i++) {
counter = 0;
if (something()) counter++;
}在第一个版本中,计数器变量的作用域在for循环中,每次迭代都在内存中重新分配。在第二种情况下,它只是被覆盖在整个程序的单个内存位置上。我认为第二个版本更有效率,但效率是微不足道还是相当大?
发布于 2015-03-08 22:16:46
在第一个版本中,计数器不会在每次迭代时重新分配到内存中。它是一个基本类型(int)的变量,所以大多数编译器都会将它存储在堆栈中。没有理由对循环中的不同迭代使用不同的堆栈位置,因此它将存储在相同的位置,就像在第二个版本中一样。
(这假设编译器不会完全删除counter变量,因为您没有在任何地方使用它的值。)
https://stackoverflow.com/questions/28932509
复制相似问题