Есть ли разница между использованием выражений прямого арифметического c и передачей значений в метод во время выполнения? - PullRequest
0 голосов
/ 14 января 2020

Есть ли разница во времени выполнения? если есть, то почему?

int pairSumSequence(int n) { 
    int sum = 0;
    for (int i = 0; i <  n; i++){
        sum += pairSum(i, i+1);
    }
    return sum;
}

int pairSum(int a, int b) {
    return a + b;
}

против

int pairSumSequence(int n) { 
    int sum = 0;
    for (int i = 0; i <  n; i++){
        sum += i + (i + 1); //2 * i + 1
    }
    return sum;
}

Спасибо!

1 Ответ

0 голосов
/ 14 января 2020

Есть ли разница во времени выполнения?

Почти незаметно, и это сильно зависит от возможных оптимизаций. Компилятор может встроить вызов (заменить его эквивалентным выражением, как вы это сделали). Даже JIT-компилятор может это сделать.

Если есть, то почему?

Точно так же, как в реальной жизни! Когда вы оцениваете первую форму, вам нужно перейти к функции, вычислить ее, а затем вернуться к точке вызова: это занимает время, и машина не делает ничего, кроме вас. Вы должны оплатить звонок. Вызов функции не очень дорогой, поэтому для многих приложений он не оказывает серьезного влияния на производительность; конечно, если вы находитесь в какой-то конкретной c области, которая может измениться, подумайте о задачах с высокими вычислениями как о прогнозировании, моделировании и т. д. c.

Итак, в заключение напишите call форма, так как это разлагает код на части, приводя к более читаемому коду, и т. Д. Пусть компиляторы делают оптимизацию, если это возможно (сейчас компиляторы очень умны). Я сомневаюсь, что вам нужно будет оптимизировать это самостоятельно.

...