Obtenir getrusage() pour mesurer le temps de système en C

Je tiens à mesure que le système de temps qu'il faut pour exécuter du code. Pour ce faire, je sais que j'aimerais sandwich dit code entre les deux appels à getrusage(), mais j'obtiens des résultats inattendus...

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

J'espère que ce produit de deux nombres différents, mais hélas! Après avoir vu mon ordinateur pense que pour une seconde ou deux, c'est le résultat:

Started at: 0.1999s
Ended at: 0.1999s

Je ne suis pas à l'aide de getrusage() à droite? Pourquoi ne pas ces deux numéros différents? Si je suis fondamentalement mauvais, est-il une autre façon d'utiliser getrusage() pour mesurer le temps au système de code source? Merci pour la lecture.

Veuillez observer que tv_usec sont microsecondes, de sorte que votre format doit être %lu.%06u.

OriginalL'auteur Stout Joe | 2012-05-09