`

【时间测量】代码运行时间的测量方法【linux/window】

 
阅读更多
一,返回单位为毫秒

#include<windows.h>
DWORD dwStart = GetTickCount();
// 测试代码

DWORD dwTime = GetTickCount() - dwStart;


注意:GetTickCount()精确度有限,跟CPU有关,一般精确度在16ms左右,最精确也不会精确过10ms,这就是说如果你的时间间隔在16ms以内的话,两个时间相减为0,如果大于16ms且小于32ms的话,两个时间相减为16ms(也不完全严格,有的时候会是15或者17,根据当时CPU的处理情况而定)。其实也就是说你得到的这个差是实际时间间隔除以16(具体是几取决于你机器的处理能力,但是不会小于10),把余数舍弃。


二,返回时间为秒
#include<time.h>
unsigned long start,stop;
start=time(NULL); //取值为秒
//你的程序
stop=time(NULL);
printf("运行时间:%ld",stop-start);

三,精确计时法

QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位
计时.但是 QueryPerformanceCounter()确切的精确计时的最小单位是与系统有关的,所以,必
须 要 查 询 系 统 以 得 到 QueryPerformanceCounter() 返 回 的 嘀 哒 声 的 频
率.QueryPerformanceFrequency()提供了这个频率值,返回每秒嘀哒声的个数.计算确切的时

间是从第一次调用 QueryPerformanceCounter()开始的
使用 window 操作系统本身提供的 API 接口,程序如下:
#include<windows.h>


LARGE_INTEGER Freq; LARGE_INTEGER start; LARGE_INTEGER end;
QueryPerformanceFrequency(&Freq); // 获取时钟周期
QueryPerformanceCounter(&start); // 获取时钟计数


你的程序
QueryPerformanceCounter(&end);
/*此处*1000,以毫秒为单位;*1000000 以微秒为单位*/
/*由于执行时间极短(可能是几微秒),所以采用微秒为单位*/

printf("%d",(end.QuadPart-start.QuadPart)*1000000/Freq.QuadPart);


注意:1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒)=10^12ps(皮秒)=10^15fs(飞秒)=10^18as(阿秒)=10^21zm(仄秒)=10^24ym(幺秒)


例子:




四,如果是在linux平台下面呢?

时间的测量有多种方式。一种是C语言库函数 time(),它可以提供秒级的计时,比较粗糙。

一种是C语言库函数gettimeofday(),大约可以精确到微妙,但会受到CPU调度的影响。

一种是时间戳计时器(Time Stamp Counter),可以达到纳秒级计时精度。

1)time 命令 — 执行命令并计时

time find . -name "*.c" |xargs wc -l // 统计执行命令时间

real 0m33.748s
user 0m0.772s
sys 0m1.044s

(1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间;

(2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;

(3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和。

其中,用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。

另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。


2)微秒级测量方法


struct timeval

{

long tv_sec; //秒域

long tv_usec; //微妙域

}


(tvend.tv_sec-tvstart.tv_sec)+(tvend.tv_usec-tvstart.tv_usec)/1000000 = 以秒为单位的计时时间。


以下得到以微秒为计时单位的时间








分享到:
评论

相关推荐

    window和linux系统iperf网络测速工具使用

    在 B 结点上进入命令提示窗口,然后运行 iPerf -c 192.168.0.199 -t 60,这个命令是将 B 结点以客户端的方式运行,并且连接 IP 地址为 192.168.0.199 的服务端,监视测量数据时间是 60 秒。 通过简单的设置和简单的...

    iperf源码及在linux和window下面的执行文件

    源代码和不同平台的执行文件的提供使得用户可以在Linux和Windows系统上进行跨平台的网络测试。接下来,我们将深入探讨iperf的工作原理、功能、安装过程以及如何在Linux和Windows环境下使用。 一、iperf的工作原理与...

    北京邮电大学操作系统综合课程设计.docx

    - **测量关键模块的启动时间**:首先需要测量几个关键代码模块的启动时间,比如`console_init()`、`vfs_caches_init`和`pci_init()`等。这一步骤有助于识别启动过程中哪些环节耗时最长。 - **调整MAX_HWIFS参数**...

    测试网卡性能的工具源代码

    2. **Jitter(抖动)**:测量数据包传输时间的差异,反映了网络的稳定性。 3. **丢包率(Packet Loss)**:传输过程中丢失的数据包占总数据包的比例。 4. **TCP窗口大小(TCP Window Size)**:TCP协议中接收方窗口...

    嵌入式Linux轻量级图形应用库的设计

    嵌入式Linux轻量级图形应用库在当今的嵌入式系统设计中扮演着至关重要的角色,尤其是在消费类电子产品和测量控制设备等领域的应用。图形用户界面(GUI)不仅是技术上的核心,也是影响用户对产品接受度的关键因素。在...

    Iperf详细使用方法.pdf

    iPerf可以通过开源代码或者二进制文件形式获取,支持多种操作系统,包括Windows、Linux、FreeBSD、Mac OS X等。可以从官方网站或其他可信来源下载安装程序。 2. **部署测试环境**:为了测量Wi-Fi性能,通常需要在所...

    GTK+2.0.pdf linux图形编程

    ### GTK+2.0 教程 — Linux图形编程 ...通过以上内容的学习,开发者不仅可以掌握GTK+2.0的基本使用方法,还能深入了解其高级特性,从而能够利用GTK+2.0开发出功能强大且用户体验良好的Linux应用程序。

    屏幕取色器

    在Java编程环境中开发的屏幕取色器,结合了便携性和跨平台的特性,使得它能在多种操作系统上运行,如Windows、Mac OS和Linux。这个特定的屏幕取色器版本还包含了标尺工具,为设计人员和开发者提供了更多便利,他们...

    uwp-iperf3-1.1.5.0-source

    它支持多种操作系统,包括Linux、Windows、Android、iOS等,并且可以在客户端-服务器模式下运行,也可以在双向模式下同时作为客户端和服务器。 iperf3是iperf的第三个主要版本,相比之前的版本,它引入了许多新特性...

    java 70个问答

    - 可以通过记录系统当前时间(`System.currentTimeMillis()`)的方式来测量程序或代码片段的运行时间。 23. **获取文件类型:** - 通过`URLConnection`对象的`getContentType()`方法可以获取文件的MIME类型。 24...

    70个JAVA问答.txt

    测量代码段的执行时间可以使用`System.currentTimeMillis()`方法。例如: ```java long t1 = System.currentTimeMillis(); // 你的代码 long t2 = System.currentTimeMillis(); long time = t2 - t1; ``` ### 23. ...

    WinMTRCmd:命令行Windows MTR-开源

    通过发送ICMP回显请求,WinMTRCmd可以测量从发送到接收一个数据包所需要的时间,从而评估网络的稳定性和速度。结合traceroute,WinMTRCmd能提供全面的网络性能分析。 WinMTRCmd基于WinMTR项目,这是一个图形化的...

    性能资料整理.pdf

    整体而言,性能调优涉及的知识点非常广泛,包括但不限于性能测试理论、各类性能分析工具的使用、系统性能评估方法以及性能优化实践等。一个性能工程师需要具备扎实的理论基础,丰富的实践经验,以及对工具熟练的操作...

    praat國際音標

    外围主要包括对象窗口(Object window,标题为Praat objects)、画板窗口(Picture window,标题为Praat picture)、脚本编辑器(ScriptEditor)、按钮编辑器(ButtonEditor)、数据编辑器(DataEditor,无固定标题...

Global site tag (gtag.js) - Google Analytics