C/C++において処理時間測定にtime()なんか使うな
time()
の戻り値は秒単位であり,また実時間の測定のみである.
実時間の測定を行いたいならgettimeofday
を,プロセス時間とシステム時間の測定を行いたいならgetrusage
を用いること.
マイクロ秒単位までの測定を行える.
以下コピペ用
実時間測定gettimeofday
/* gettimeofday_sample.c */ #include <stdio.h> #include <sys/time.h> int main(void) { struct timeval stert_real_time, end_real_time; gettimeofday(&stert_real_time, NULL); /* 処理 */ gettimeofday(&end_real_time, NULL); printf("real\t%lfs\n", (end_real_time.tv_sec - stert_real_time.tv_sec) + (end_real_time.tv_usec - stert_real_time.tv_usec)*1.0E-6); return 0; }
プロセス・システム時間測定getrusage
/* gettimeofday_sample.c */ #include <stdio.h> #include <sys/time.h> #include <sys/resource.h> int main(void) { struct rusage start_resource_usage, end_resource_usage; getrusage(RUSAGE_SELF, &start_resource_usage); /* 処理 */ getrusage(RUSAGE_SELF, &end_resource_usage); printf("user\t%lfs\n", (end_resource_usage.ru_utime.tv_sec - start_resource_usage.ru_utime.tv_sec) + (end_resource_usage.ru_utime.tv_usec - start_resource_usage.ru_utime.tv_usec)*1.0E-6); printf("sys\t%lfs\n", (end_resource_usage.ru_stime.tv_sec - start_resource_usage.ru_stime.tv_sec) + (end_resource_usage.ru_stime.tv_usec - start_resource_usage.ru_stime.tv_usec)*1.0E-6); return 0; }