Более эффективно использовать временную переменную или напрямую из массива? - PullRequest
0 голосов
/ 02 августа 2011

Является ли более эффективным доступ к массиву каждый раз, когда я использую переменную, или для создания временной переменной и установки ее в массив:

Например:

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 голосов
/ 02 августа 2011

Компилятор достаточно умен, чтобы понять, что они эквивалентны и будут генерировать один и тот же код. Поэтому вы должны написать это наиболее понятным способом для будущих людей, читающих ваш код.

0 голосов
/ 02 августа 2011

Как говорится в ответе Аасмунда, разницы в производительности, скорее всего, нет, поскольку компилятор будет обрабатывать оба одинаково. Однако вы можете обнаружить, что присвоение временной переменной улучшает читаемость кода, и если в будущем вы захотите использовать ints[i+1] в цикле, вам нужно будет изменить только одну строку, а не много. Никогда не называйте переменную «temp», дайте ей полезное имя, например currentInt.

0 голосов
/ 02 августа 2011

Это не имеет значения;компилятор, скорее всего, выдаст один и тот же код в обоих случаях (если вы не отключили все оптимизации).(Сгенерированный ассемблерный код, вероятно, будет напоминать второй пример - сначала элемент массива будет загружен в регистр, а затем регистр будет использоваться всякий раз, когда необходим элемент массива.) Используйте стиль, который вы считаете наиболее читабельными наименее подвержен ошибкам (что, вероятно, является последним стилем, который избегает повторения индекса).

(Предполагается, что у вас нет потоков или переменных, поэтому гарантируется, что элемент массива не будетизменить в ходе итерации цикла.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...