当前位置: 首页 > news >正文

(C语言)精确计算程序运行时间的方法

 一、先计算每秒多少个计数

typedef __int64 s64;s64 tps; /* timestamp counter per second */s64 get_tps(void)
{s64 t0 = rdtsc();Sleep(100);return (rdtsc() - t0) * 10;
}

这段代码定义了一个函数 get_tps,该函数用于测量处理器的时间戳计数器(RDTSC)每秒的计数率。

具体来说:

  1. rdtsc() 是一个函数,通常在 x86 架构的处理器上使用,用于读取处理器的时间戳计数器。这个计数器通常每处理器周期增加一次,因此,通过读取这个计数器的值,我们可以得到处理器的运行速度的一个大致估计。
  2. get_tps 函数首先读取时间戳计数器的当前值(t0)。
  3. 然后,它使程序暂停(或“睡眠”)100毫秒。
  4. 之后,它再次读取时间戳计数器的值,并从第二次读取的值中减去第一次读取的值。
  5. 最后,它用所得的结果乘以10来计算在100毫秒内的时间戳计数器的计数。这个值乘以10是因为我们测量的是100毫秒内的计数,而我们需要的是每秒的计数率。

所以,这个函数返回的是处理器在100毫秒内的时钟周期数。这可以用来大致估计处理器的速度。例如,如果这个函数返回100000000,那么这意味着处理器在100毫秒内运行了大约10亿个时钟周期,或者说它每秒运行了大约10亿个时钟周期。

二、获取当前时间的总计数

typedef __int64 s64;s64 rdtsc(void)
{LARGE_INTEGER a;QueryPerformanceCounter(&a);return (s64)a.QuadPart;
}

这个函数使用了Windows API中的QueryPerformanceCounter函数来获取当前处理器的时间戳计数器的值,并返回一个64位整数表示的该值。

具体来说:

  1. QueryPerformanceCounter(&a) 调用会获取当前处理器的时间戳计数器的值,并存储在 a 变量中。
  2. 然后,函数将 a.QuadPart(这是一个64位整数的组成部分)转换为 s64 类型的返回值。

这个函数通常用于测量程序运行的时间或计算性能。通过比较两个时间戳计数器的值,可以计算出两个时间点之间的时间差。

三、使用

int main(void)
{tps = get_tps();t1 = rdtsc();//待测试的函数t2 = rdtsc();printf("用时:%.3f\n", (double)(t2 - t1) / tps);return 0;
}

http://www.lryc.cn/news/261549.html

相关文章:

  • 【Vulnhub 靶场】【VulnCMS: 1】【简单】【20210613】
  • 普冉(PUYA)单片机开发笔记(10): I2C通信-配置从机
  • Idea maven打包时 报错 illegalArgumentException: Malformed \uxxxx encoding 解决方法
  • Qt中槽函数在那个线程执行的探索和思考
  • C++ 类模板
  • 边缘计算系统设计与实践
  • 【Spark精讲】Spark存储原理
  • 贪心算法:买卖股票的最佳时机II 跳跃游戏 跳跃游戏II
  • 音频DAC,ADC,CODEC的选型分析,高性能立体声
  • python 连接SQL server 请用pymssql连接,千万别用pyodbc
  • IntelliJ IDEA 自带HTTP Client接口插件上传文件示例
  • C++中的接口有什么用
  • el-table合并相同数据的单元格
  • Verilog Systemverilog define宏定义
  • 51单片机应用从零开始(十一)·数组函数、指针函数
  • 【PostgreSQL】从零开始:(八)PostgreSQL-数据库PSQL元命令
  • 02 使用Vite创建Vue3项目
  • Shell三剑客:sed(简介)
  • tp连接数据库
  • jmeter,断言:响应断言、Json断言
  • dockerfite创建镜像---INMP+wordpress
  • 服务器数据恢复—raid5热备盘未激活崩溃导致上层oracle数据丢失的数据恢复案例
  • 生产派工自动化:MES系统的关键作用
  • netty-daxin-2(netty常用事件讲解)
  • 使用playbook部署k8s集群
  • Python基础入门第四节,第五节课笔记
  • 基于Java SSM框架实现智能停车场系统项目【项目源码+论文说明】
  • React系列:useEffect的使用
  • Ps:形状工具 - 描边选项
  • C#基础知识 - 变量、常量与数据类型篇