(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.mzph.cn/news/225140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF(网络安全渗透)

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF(网络安全渗透) 全国职业院校技能大赛高职组信息安全管理与评估 (赛项) 评分标准 第三阶段 夺旗挑战CTF(网络安全渗透) *竞赛项目赛题* 本文…

柔性数组(结构体成员)

目录 前言: 柔性数组: 给柔性数组分配空间: 调整柔性数组大小: 柔性数组的好处: 前言: 柔性数组?可能你从未听说,但是确实有这个概念。听名字,好像就是柔软的数…

如何连接到 Azure SQL 数据库(下)

在《如何连接到 Azure SQL 数据库(上)》中,我们已经了解到了以下内容↓↓↓ 开始之前:Azure 连接凭据和防火墙 如何检索 Azure 连接凭据如何配置服务器防火墙使用 SQL Server Management Studio 连接到 Azure使用 dbForge Studio…

数据结构--稀疏矩阵及Java实现

一、稀疏 sparsearray 数组 1、先看一个实际的需求 编写的五子棋程序中,有存盘退出和续上盘的功能。 分析问题: 因为该二维数组的很多值是默认值 0, 因此记录了很多没有意义的数据.->稀疏数组。 2、稀疏数组基本介绍 当一个数组中大部分元素为0…

wordpress安装之正式开始安装wordpress

1、拉取wordpress镜像 docker pull wordpress 2、启动容器 启动容器,设置容器名为wordpress2并把80端口映射到宿主机的9988端口 docker run -it --name wordpress2 -p 9988:80 -d wordpress 3、查看容器状态 docker ps 4、安装wordpress博客程序 因为我们前面启…

微信小程序---使用npm包安装Vant组件库

在小程序项目中,安装Vant 组件库主要分为如下3步: 注意:如果你的文件中不存在pakage.json,请初始化一下包管理器 npm init -y 1.通过 npm 安装(建议指定版本为1.3.3) 通过npm npm i vant/weapp1.3.3 -S --production 通过y…

大数据技术14:FlinkCDC数据变更捕获

前言:Flink CDC是Flink社区开发的flink-cdc-connectors 组件,这是⼀个可以直接从 MySQL、PostgreSQL 等数据库直接读取全量数据和增量变更数据的 source 组件。 https://github.com/ververica/flink-cdc-connectors 一、CDC 概述 CDC 的全称是 Change …

换内核ubuntu

grep menuentry /boot/grub/grub.cfg我要使用第三个(索引从0开始,所以是第二个) 可以使用vi编辑(很麻烦) i变为插入模型 esc变为普通模型 :x删除单个字符,dd删除一行,:wq保存并退出 更新文件…

rabbitmq-windows安装使用-简易后台界面-修改密码

文章目录 1.下载2.安装3.安装 RabbitMQ4.后台访问5.修改密码 1.下载 将erlang运行时和rabbitmq-windows版本,上传在csdn,下载链接。https://download.csdn.net/download/m0_67316550/88633443 2.安装 右键,以管理员身份运行rabbitmq。启动…

Android 12.0 Launcher3定制化之动态时钟图标功能实现

1.概述 在12.0的系统产品rom定制化开发中,在Launcher3中的定制化的一些功能中,对于一些产品要求需要实现动态时钟图标功能,这就需要先绘制时分秒时针表盘,然后 每秒刷新一次时钟图标,时钟需要做到实时更新,做到动态时钟的效果,接下来就来分析这个功能的实现 如图: 2.动…

《Kotlin核心编程》笔记:面向对象

kotlin 中的类 // Kotlin中的一个类 class Bird {val weight: Double 500.0val color: String "blue"val age: Int 1fun fly() { } // 全局可见 }把上述代码反编译成Java的版本,然后分析它们具体的差异: public final class Bird {privat…

Linux部署MySQL5.7和8.0版本 | CentOS和Ubuntu系统详细步骤安装

一、MySQL数据库管理系统安装部署【简单】 简介 MySQL数据库管理系统(后续简称MySQL),是一款知名的数据库系统,其特点是:轻量、简单、功能丰富。 MySQL数据库可谓是软件行业的明星产品,无论是后端开发、…

【产品经理】产品专业化提升路径

产品专业化就是上山寻路,梳理一套作为产品经理的工作方法。本文作者从设计方法、三基座、专业强化、优秀产品拆解、零代码这五个方面,对产品经理的产品专业化进行了总结归纳,一起来看一下吧。 产品专业化就是上山寻路,梳理一套作为…

Zlmediakit 接收到 rtc包后的处理流程

客户端通过rtc 推流(视频为h264)到 ZlmediaKit 时,ZlmediaKit收到包后,到进行rtp 包排序的流程堆栈,方便了解逻辑 #0 mediakit::RtspMediaSourceImp::onWrite (this0x7fffd0009d68, rtp..., key_posfalse) at /root/…

数据结构 | Log-Structured Merge Tree (LSM Tree)

今天介绍LSM Tree这个数据结构,严格意义上来说,他并不像他的名字一样是一棵树型的数据结构,而更多是一种设计思想。 LSM Tree最先在1996年被提出,后来被广泛运用于现代NoSQL(非关系型数据库)系统中&#xf…

虚幻学习笔记17—C++委托(单播)

一、前言 相比“代理”这个名词我更喜欢叫“委托”,虚幻的委托分为三类,分别为单播、多播和动态多播。单播顾名思义就是一次只能绑定一个函数的委托,多播能一次性绑定多个,动态多播即可以在蓝图中进行动态的绑定且可以绑定多个。 …

mybatisplus使用雪花id通过swagger返回ID时精度丢失问题

在使用mybatisplus自带雪花的时候会发现返回的ID是19位的长度,因此在通过swagger页面展示的时候会发现后端返回的和页面展示的ID不一致问题。是因为精度丢失的问题。因此需要更改雪花ID的长度跟踪进去:发现是DefaultIdentifierGenerator类实现了Identifi…

蓝桥杯专题-真题版含答案-【扑克牌排列】【放麦子】【纵横放火柴游戏】【顺时针螺旋填入】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

【Redis】【MySQL】redis与mysql的慢查询

redis和mysql都存在对于慢查询的日志记录,下面将叙述一下两者的慢查询。 一,redis[1] redis的慢查询日志本质上是一个list对象,不过redis并没有提供慢查询日志的key。开发者可以通过下列命令查询慢查询日志: #获得慢查询日志&a…

Python Pandas 如何给DataFrame增加一行/多行 数据(第6讲)

Python Pandas 如何给DataFrame增加一行/多行 数据(第6讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…