本文主要是介绍time(),gettimeofday()及GetTickCount()效率比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转自:http://1.guotie.sinaapp.com/?p=157
time()和gettimeofday()是linux的系统调用,GetTickCount()是windows的函数。
time:返回至1970-1-1 00:00:00至今的秒数;
gettimeofday:除了返回秒数外,还有纳秒数,用于更精确的计时;
GetTickCount:返回系统启动至今的毫秒数
使用三个函数,分别调用1千万次,测试结果如下:
time:约967毫秒;
gettimeofday:约1800毫秒;
GetTickCount:约70毫秒;
可见,GetTickCount要快很多很多,在linux系统下,频繁使用time及gettimeofday严重影响效率。
参考资料:
Linux 下高性能用户空间时间服务_DreamFreeLancer的博客-CSDN博客
文中给出了在linux下获得毫秒级时间的思路,并给出了相关代码。
测试代码如下:
linux:
[c]
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#define TEST_LOOPS 10000000
int main()
{
time_t tm;
struct timeval tv1, tv2, tv_test;
int i;
gettimeofday(&tv1, NULL);
for(i = 0; i < TEST_LOOPS; i ++)
{
gettimeofday(&tv_test, NULL);
}
gettimeofday(&tv2, NULL);
printf("run gettimeofday %u times, used %u usec.\n", TEST_LOOPS,
(tv2.tv_sec – tv1.tv_sec) * 1000000 +
tv2.tv_usec – tv1.tv_usec);
gettimeofday(&tv1, NULL);
for(i = 0; i < TEST_LOOPS; i ++)
{
time(&tm);
}
gettimeofday(&tv2, NULL);
printf("run time %u times, used %u usec.\n", TEST_LOOPS,
(tv2.tv_sec – tv1.tv_sec) * 1000000 +
tv2.tv_usec – tv1.tv_usec);
return 0;
}
[/c]
windows:
[c]
// tick.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Windows.h"
#define TEST_LOOPS 10000000
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
unsigned int tv1, tv2, tv_test;
tv1 = GetTickCount();
for(; i < TEST_LOOPS; i ++)
{
tv_test = GetTickCount();
}
tv2 = GetTickCount();
printf("run GetTickCount %u times, used %u msec, current tick: %u.\n",
TEST_LOOPS, tv2 – tv1, tv2);
return 0;
}
[/c]
Related posts:
- Linux下锁对性能的影响有多大(进程版本)?
- socket通信,nonblocking与block发送延迟的测试——client端代码
- 多线程的内存池能够提高效率吗?!
- Linux x86_64下malloc最大能够分配多少内存[多线程版本]?
- __sync_fetch_and_add的测试
- 应用可分配的最大内存及malloc
(187条消息) time(),gettimeofday()及GetTickCount()效率比较_MrBetter先生的博客-CSDN博客_gettimeofday效率高吗
这篇关于time(),gettimeofday()及GetTickCount()效率比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!