time(),gettimeofday()及GetTickCount()效率比较

本文对比了time(), gettimeofday()和GetTickCount()三个不同操作系统的计时函数性能。通过调用1千万次的测试,发现GetTickCount()在Windows系统下运行速度最快,而time()和gettimeofday()在Linux系统下效率较低。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://blog.youkuaiyun.com/xcjlanqiu/article/details/44590433

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严重影响效率。

参考资料:

http://blog.youkuaiyun.com/DreamFreeLancer/article/details/4150165

文中给出了在linux下获得毫秒级时间的思路,并给出了相关代码。

测试代码如下:

linux:

#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;
}

windows:

// 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;
}

这篇的测试结果比较老,下一篇用现在的环境测试一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值