Warum wird die Leistung eines laufenden Programms mit der Zeit besser?

Betrachten Sie den folgenden Code:

#include <iostream>
#include <chrono>

using Time = std::chrono::high_resolution_clock;
using us = std::chrono::microseconds;

int main()
{
    volatile int i, k;
    const int n = 1000000;

    for(k = 0; k < 200; ++k) {
            auto begin = Time::now();
            for (i = 0; i < n; ++i);  // <--
            auto end = Time::now();
            auto dur = std::chrono::duration_cast<us>(end - begin).count();
            std::cout << dur << std::endl;
    }

    return 0;
}

Ich messe immer wieder die Ausführungszeit des innerenfor loop. Die Ergebnisse sind in der folgenden Grafik dargestellt (y: Dauer, x: Wiederholung):

Was verkürzt die Ausführungszeit der Schleife?

Umgebung:linux (Kernel 4.2) @ Intel i7-2600, kompiliert mit:g++ -std=c++11 main.cpp -O0 -o main

Edit 1

Die Frage istnicht über Compiler-Optimierung oder Performance-Benchmarks. Die Frage ist, warum die Leistung mit der Zeit besser wird. Ich versuche zu verstehen, was zur Laufzeit passiert.

Edit 2

Wie von @ vorgeschlagVaughn Cato, Ich habe die CPU-Frequenzskalierungsrichtlinie in "@" geänderPerformanc ". Jetzt erhalte ich die folgenden Ergebnisse:

Es bestätigtVaughn Cato 's Vermutung. Entschuldigung für die dumme Frage.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage