Tôi muốn đo thời gian hệ thống cần để thực thi một số mã. Để thực hiện điều này, tôi biết tôi sẽ bánh sandwich cho biết mã giữa hai cuộc gọi đến getrusage(), nhưng tôi nhận được một số kết quả bất ngờ ...Bắt getrusage() để đo thời gian hệ thống trong 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;
}
Tôi hy vọng rằng điều này tạo ra hai con số khác nhau, nhưng than ôi! Sau khi nhìn thấy máy tính của tôi suy nghĩ trong một hoặc hai giây, đây là kết quả:
Started at: 0.1999s
Ended at: 0.1999s
Tôi không sử dụng getrusage() phải không? Tại sao hai con số này lại không khác nhau? Nếu tôi về cơ bản là sai, có cách nào khác để sử dụng getrusage() để đo thời gian hệ thống của một số mã nguồn không? Cảm ơn bạn đã đọc.
Hãy lưu ý rằng 'tv_usec' là micro giây, do đó định dạng của bạn phải là'% lu.% 06u'. – Mapio