Questa uscita code example volontà time: 0
indipendentemente dal valore di N
quando compilato con Visual Studio Professional 2013 Update 3 in modalità di rilascio, sia l'opzione 32 e 64-bit:È possibile riprodurre o spiegare questo errore di Visual C++ con ctime?
#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;
}
Quando la prova con gcc, clangore e altra versione di vC++ su rextester.com, si comporta correttamente ed emette time
maggiore di zero. Qualche indizio su cosa sta succedendo qui?
ho notato che la funzione inlining g()
ripristina comportamento corretto, ma cambiando dichiarazione e inizializzazione ordine di t0
, r
e t1
no.
Probabilmente il tempo per eseguire l'operazione è inferiore alla risoluzione del timer utilizzato da Windows quando si chiama clock(). Recentemente ho scritto qui una risposta che potrebbe darti un'idea dell'uso dei timer di risoluzione superiore su Windows: http://stackoverflow.com/questions/25954602/ctimespan-always-gets-zero –
Prova N = 2147483646 e vedi se questo fa un differenza. –
@MichaelPetch _time per fare l'operazione è sotto la risoluzione del timer_ - non è il caso, ho provato grande 'N', dove ci vogliono alcuni secondi per eseguire' f() '. –