Obtención de getrusage () para medir la hora del sistema en C

Me gustaría medir el tiempo que tarda el sistema en ejecutar algún código. Para hacer esto, sé que haría sándwich dicho código entre dos llamadas a getrusage (), pero obtengo algunos resultados inesperados ...

<code>#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;
}
</code>

Espero que esto produzca dos números diferentes, pero ¡ay! Después de ver mi computadora pensar por un segundo o dos, este es el resultado:

<code>Started at: 0.1999s
Ended at: 0.1999s
</code>

¿No estoy usando getrusage () verdad? ¿Por qué no deberían ser estos dos números diferentes? Si estoy equivocado fundamentalmente, ¿hay otra manera de usar getrusage () para medir la hora del sistema de algún código fuente? Gracias por leer.

Respuestas a la pregunta(3)

Su respuesta a la pregunta