Код выполняется в десять раз медленнее, когда все, что я сделал, это переместил код цикла в функцию

Я запускал приведенный ниже код, который практически ничего не делает. Он просто добавляет 2 и четыре 100 миллионов раз и выводит время выполнения.

#include "time.h"
#include <iostream>
using namespace std;

void add (){
int tot = 2+4;
}

void main(){
int t = clock();
int count = 0;
while(count<100000000){
    int tot = 2+4;
    count++;
}
cout <<endl<< "runtime = " << fixed <<(double) (clock() - t) / CLOCKS_PER_SEC <<"s" << endl;

}

Но мне было интересно увидеть разницу во времени, когда я делаю то же самое, но вызываю функцию. Поэтому я заменил строку «int tot = 2 + 4» на «add ()».

Я ожидал, что вторая среда выполнения будет немного дольше, но она оказалась намного дольше. Первая реализация = .3s , а вторая реализация = 3s .

Я понимаю, что для вызова функции требуется использовать стек для хранения адреса возврата и локальных данных. Но он, должно быть, делает намного больше , чем это?

Было бы здорово, если бы кто-нибудь мог объяснить мне, что именно вызывает большую разницу во времени выполнения, или, может быть, я делаю что-то глупое.

5
задан Gordon Gustafson 6 August 2011 в 00:51
поделиться