Me gustaría medir el tiempo del sistema que se necesita para ejecutar algún código. Para ello sé que me sándwich de dicho código entre dos llamadas a getrusage(), pero me da algunos resultados inesperados ...Obtener getrusage() para medir el tiempo del sistema en C
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <stdio.h>
int main() {
struct rusage usage;
struct timeval start, end;
int i, j, k = 0;
getrusage(RUSAGE_SELF, &usage);
start = usage.ru_stime;
for (i = 0; i < 10000; i++) {
/* Double loop for more interesting results. */
for (j = 0; j < 10000; j++) {
k += 20;
}
}
getrusage(RUSAGE_SELF, &usage);
end = usage.ru_stime;
printf("Started at: %ld.%lds\n", start.tv_sec, start.tv_usec);
printf("Ended at: %ld.%lds\n", end.tv_sec, end.tv_usec);
return 0;
}
espero que esto produce dos números diferentes, pero por desgracia! Después de ver a mi equipo piensa por un segundo o dos, este es el resultado:
Started at: 0.1999s
Ended at: 0.1999s
Am Not I utilizando getrusage() ¿verdad? ¿Por qué no deberían estos dos números ser diferentes? Si estoy fundamentalmente equivocado, ¿hay alguna otra forma de utilizar getrusage() para medir el tiempo del sistema de algún código fuente? Gracias por leer.
Tenga en cuenta que 'tv_usec' son microsegundos, por lo que su formato debe ser'% lu.% 06u'. – Mapio