#include #include #include #include #include #define OVERHEAD_TIMES 30000 double my_sqrt(double num) { return sqrt(num); } pthread_t my_pthread_self(void) { return pthread_self(); } int main(int argc, char** argv, char** envp) { struct timeval tv; gettimeofday(&tv, NULL); if (argc < 2) return -1; unsigned long long msec1 = atoll(argv[1]); unsigned long long msec2 = tv.tv_sec * 1000000ULL + tv.tv_usec; struct timeval tv1, tv2; gettimeofday(&tv1, NULL); for (int j = 0; j < OVERHEAD_TIMES; j++) { gettimeofday(&tv, NULL); } gettimeofday(&tv2, NULL); unsigned long long msec3 = tv1.tv_sec * 1000000ULL + tv1.tv_usec; unsigned long long msec4 = tv2.tv_sec * 1000000ULL + tv2.tv_usec; unsigned long long overhead = (msec4 - msec3) / OVERHEAD_TIMES; printf("%llu\n", msec2 - msec1 - overhead); my_sqrt(1.0); my_sqrt(2.0); my_pthread_self(); return 0; }