Я быстро проверил этот вопрос, но не смог найти ответ - хотя я думаю, что он мог быть поднят здесь раньше.
Я возился с написанием простой реализации сита eratosthenes в C ++ и хронометража результата:
#include <iostream>
#include <math.h>
int main() {
int n = 100000;
int seive [n];
for (int i=0; i<n; i++) {
seive[i] = i;
}
for (int i=2; i < ceil(sqrt(n)); i++) {
for (int j=i*2; j<=n; j+=i) {
seive[j-1] = -9;
}
}
for (int i=0; i<n; i++) {
if (seive[i] != -9) {
std::cout << i+1 << "\n";
}
}
return 0;
}
Я компилирую его, используя:
g++ seive.cpp -o seiveCpp
И затем время, используя:
time ./seiveCpp
Первый раз:
./seiveCpp 0.01s user 0.01s system 10% cpu 0.184 total
Второй раз:
./seiveCpp 0.01s user 0.01s system 58% cpu 0.034 total
В третий раз:
./seiveCpp 0.01s user 0.01s system 59% cpu 0.037 total
et c.
Если я повторяю это несколько раз, кажется, что выполнение кода всегда примерно в 5 раз медленнее в первый раз, чем все последующие времена.
В чем причина этого?
Я запускаю его на MacBook Pro 2017 года с двухъядерным процессором Intel Core i5 2,3 ГГц и компилирую с помощью Apple Clang версии 11.0.0 (Clang -1100.0.33.12