#include #include #include // Ivan Novick, May 16, 2009 // gcc time_test.c -o time_test -lrt #define NUM_TESTS 10000000 struct timespec diff_timespec(struct timespec start, struct timespec end); long long microsec_elapsed(struct timespec diff); int main(int argc, char** argv){ struct timespec start; struct timespec end; struct timespec diff; long long i; time_t tmp1; clock_gettime(CLOCK_MONOTONIC, &start); for (i = 1; i < NUM_TESTS; ++i){ tmp1 = time(NULL); } clock_gettime(CLOCK_MONOTONIC, &end); diff = diff_timespec(start, end); printf("time function took: %.3f microseconds on average\n", (double)microsec_elapsed(diff)/NUM_TESTS); struct timeval tmp2; clock_gettime(CLOCK_MONOTONIC, &start); for (i = 1; i < NUM_TESTS; ++i){ gettimeofday(&tmp2, NULL); } clock_gettime(CLOCK_MONOTONIC, &end); diff = diff_timespec(start, end); printf("gettimeofday function took: %.3f microseconds on average\n", (double)microsec_elapsed(diff)/NUM_TESTS); return 0; } struct timespec diff_timespec(struct timespec start, struct timespec end) { struct timespec result; if (end.tv_nsec < start.tv_nsec){ // peform carry like in normal subtraction // 123456789 result.tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec; result.tv_sec = end.tv_sec - 1 - start.tv_sec; } else{ result.tv_nsec = end.tv_nsec - start.tv_nsec; result.tv_sec = end.tv_sec - start.tv_sec; } return result; } long long microsec_elapsed(struct timespec diff){ // 123456 123 return ((long long)diff.tv_sec * 1000000) + (diff.tv_nsec / 1000); }