linux@64 获取时间的性能评估

听人说gettimeofday 在64bit下有缓存,速度很快,测试下了,感觉不对啊。。

 

#include <time.h>
#include <sys/time.h>
#include <stdio.h>
#include <stdint.h>
int foo(int i)
{
    return i;
}
const int64_t MAX_COUNT = 100000*1000;
struct TimerEval {
  TimerEval(const char* module)
  {
      start_time_ = time(NULL);
      module_ = module;
  }
  ~TimerEval()
  {
      time_t end_time = time(NULL);
      printf("%s\telapse : %d sec\n", module_,
            (end_time - start_time_));
  }
  time_t start_time_;
  const char* module_;
};
int main()
{
    struct timeval tpTmp;
    printf("repeat %d times, test result is : \n", MAX_COUNT);
    {
        TimerEval eval("call fun");
        for (int i=0; i<MAX_COUNT; ++i)
            foo(i);
    }
    {
        TimerEval eval("call time");
        for (int i=0; i<MAX_COUNT; ++i)
            time(NULL);;
    }
    {
        TimerEval eval("call gettimeofday");
        for (int i=0; i<MAX_COUNT; ++i)
            gettimeofday(&tpTmp, NULL);;
    }
    {
        TimerEval eval("call clock_gettime");
        struct timespec tp;
        for (int i=0; i<MAX_COUNT; ++i)
            clock_gettime(CLOCK_REALTIME, &tp);
    }
    return 0;
}

测试结果

repeat 100000000 times, test result is :
call fun    elapse : 1 sec
call time    elapse : 1 sec
call gettimeofday    elapse : 7 sec
call clock_gettime    elapse : 15 sec

编译参数

 g++ timer_benchmarck.cc -m64 -lrt

 

貌似事实可能不是这样,求教于大家,可能是什么原因。

如果说time只是在gettimeofday的基础上封装了一层,那怎么time会比gettimeofday还快,不科学啊!

/* Return the current time as a `time_t‘ and also put it in *T if T is
   not NULL.  Time is represented as seconds from Jan 1 00:00:00 1970.  */
time_t
time (t) 
     time_t *t; 
{
  struct timeval tv; 
  time_t result;


  if (__gettimeofday (&tv, (struct timezone *) NULL))
    result = (time_t) -1;                                                                                                       
  else
    result = (time_t) tv.tv_sec;
  if (t != NULL)
    *t = result;
  return result;
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。