Ich möchte die Systemzeit messen, die zum Ausführen von Code benötigt wird. Ich weiß, dass ich dazu den besagten Code zwischen zwei Aufrufen von getrusage() einfügen würde, aber ich erhalte 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 würde hoffen, dass dies zwei verschiedene Zahlen erzeugt, aber leider! Nachdem ich gesehen habe, wie mein Computer für ein oder zwei Sekunden nachdenkt, ist dies das Ergebnis:
Started at: 0.1999s
Ended at: 0.1999s
Benutze ich nicht getrusage() richtig? Warum sollten diese beiden Zahlen nicht unterschiedlich sein? Wenn ich grundlegend falsch liege, gibt es eine andere Möglichkeit, getrusage() zu verwenden, um die Systemzeit eines Quellcodes zu messen? Vielen Dank fürs Lesen.
Bitte beachten Sie das
tv_usec
sind Mikrosekunden, also sollte Ihr Format sein%lu.%06u
.– Benutzer109839
1. Dezember 2015 um 9:06 Uhr