Immer getrusage() für die Messung der system-Zeit im C

Ich würde gerne Messen, das system die Zeit, die zum ausführen von code. Um dies zu tun ich weiß, ich würde die sandwich-Sprach-code zwischen den beiden anrufen zu getrusage(), aber ich bekomme einige unerwartete Ergebnisse...

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

Ich hoffe, dass dieser produziert zwei verschiedene zahlen, aber ach! Nachdem ich meinen computer denken für eine Sekunde oder zwei, das ist das Ergebnis:

Started at: 0.1999s
Ended at: 0.1999s

Bin ich nicht mit getrusage() richtig? Warum sollte man nicht diese beiden zahlen unterschiedlich sein? Wenn ich grundlegend falsch, gibt es eine andere Möglichkeit mit getrusage() zur Messung der Systemzeit von einigen source-code? Danke für das Lesen.

  • Bitte beachten Sie, dass tv_usec sind Mikrosekunden, so dass Ihr format sollte %lu.%06u.
InformationsquelleAutor Stout Joe | 2012-05-09
Schreibe einen Kommentar