使用临时变量或直接从数组更高效?

时间:2011-08-02 10:40:37

标签: c arrays loops for-loop performance

每次使用变量访问数组或创建临时变量并将其设置为数组时,它是否更有效:

例如:

int A; int B; ...etc... int Z;
int *ints = [1000 ints in here];
for (int i = 0; i < 1000; i++) {
    A = ints[i];
    B = ints[i];
    C = ints[i];
    ...etc...
    Z = ints[i];
}

int A; int B; ...etc... int Z;
int *ints = [1000 ints in here];
for (int i = 0; i < 1000; i++) {
    int temp = ints[i];
    A = temp;
    B = temp;
    C = temp;
    ...etc...
    Z = temp;
}

是的,这不是我想做的事情,但这是我能想到的最简单的例子。

那么for循环使用数组会更快吗?

3 个答案:

答案 0 :(得分:0)

没关系;在两种情况下,编译器很可能会生成相同的代码(除非您已禁用所有优化)。 (生成的汇编代码可能类似于第二个示例 - 首先,数组元素将被加载到寄存器中,然后,只要需要数组元素,就会使用寄存器。)使用您发现的最易读的样式并且最不容易出错(这可能是后一种风格,避免重复索引)。

(这假设您没有任何线程或volatile变量,因此保证数组元素在循环迭代过程中不会改变。)

答案 1 :(得分:0)

编译器足够聪明,可以意识到这些是等效的并且会生成相同的代码。因此,您应该以最易理解的方式为未来的人阅读您的代码编写它。

答案 2 :(得分:0)

正如Aasmund的回答所述,可能没有性能差异,因为编译器会以相同的方式对待它们。但是,您可能会发现分配给临时变量可以提高代码的可读性,如果将来要在整个循环中使用ints[i+1],则只需更改一行而不是多行。永远不要调用变量“temp”,给它一个有用的名称,如currentInt