Diese code example ausgeben wird time: 0
unabhängig vom Wert von N
wenn mit Visual Studio Professional 2013 Update 3 im Release-Modus kompiliert, sowohl 32 als auch 64-Bit-Option:Können Sie diesen Visual C++ - Fehler mit ctime reproduzieren oder erklären?
#include <iostream>
#include <functional>
#include <ctime>
using namespace std;
void bar(int i, int& x, int& y) {x = i%13; y = i%23;}
int g(int N = 1E9) {
int x, y;
int r = 0;
for (int i = 1; i <= N; ++i) {
bar(i, x, y);
r += x+y;
}
return r;
}
int main()
{
auto t0 = clock();
auto r = g();
auto t1 = clock();
cout << r << " time: " << t1-t0 << endl;
return 0;
}
Wenn mit gcc, Klirren und anderer Version getestet von vC++ auf rextester.com verhält es sich korrekt und gibt time
größer als null aus. Irgendwelche Hinweise, was hier vor sich geht?
Ich bemerkte, dass inlining die g()
Funktion richtige Verhalten wieder her, sondern Deklaration und Initialisierung der Reihenfolge der wechselnden t0
, r
und t1
nicht.
Wahrscheinlich ist die Zeit, um den Vorgang durchzuführen, unter der Auflösung des Timers, den Windows beim Aufruf von clock() verwendet. Ich habe vor kurzem eine Antwort hier geschrieben, die Ihnen eine Idee der Verwendung von Höherauflösungstimern unter Windows geben könnte: http://stackoverflow.com/questions/25954602/ctimespan-always-gets-zero –
Versuchen Sie N = 2147483646 und sehen Sie, ob das a macht Unterschied. –
@MichaelPetch _Zeit, um die Operation durchzuführen, ist unter der Auflösung des Timers_ - es ist nicht der Fall, ich versuchte große 'N', wo es einige Sekunden dauert, um' f() 'auszuführen. –