32 bit Linux clock () overflow
Pregunta
Necesito medir, en C ++ en Linux (y en otros sistemas similares a Unix), el tiempo de CPU (no del reloj de pared) que toma un cálculo largo, así que estoy usando clock (). Problema: en sistemas de 32 bits, esto termina después de aproximadamente 2000 o 4000 segundos.
¿Cuál es la solución recomendada para esto?
Solución
Desea usar getrusage
que llena la siguiente estructura:
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
...
};
Para completar, struct timeval
:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
Como siempre, consulte la página de manual para más detalles ( man getrusage
)
Otros consejos
¿Necesita la precisión proporcionada por clock ()
? Si no, puede usar time ()
dos veces y tomar la diferencia:
time_t start, end;
double diff;
time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);
EDITAR: time ()
mide el tiempo real (no el tiempo de CPU) como litb señaló en su comentario, pero también clock () . Si desea medir el tiempo de CPU, debe seguir los consejos de litb y usar
getrusage ()
.
Otro método posible es usar gettimeofday () dos veces, ya que devuelve la precisión de ms.
Obtenga el tiempo de forma recurrente y también incremente una variable multiplicadora int cada vez que se desplace.