当前位置: 首页 > 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;
}

相关文章:

(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,该函数用于测量处理器的时间戳计数器(RD…...

【Vulnhub 靶场】【VulnCMS: 1】【简单】【20210613】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/vulncms-1,710/ 靶场下载:https://download.vulnhub.com/vulncms/VulnCMS.ova 靶场难度:简单 发布日期:2021年06月13日 文件大小:1.4 GB 靶场作者:to…...

普冉(PUYA)单片机开发笔记(10): I2C通信-配置从机

概述 I2C 常用在某些型号的传感器和 MCU 的连接,速率要求不高,距离很短,使用简便。 I2C的通信基础知识请参见《基础通信协议之 IIC详细讲解 - 知乎》。 PY32F003 可以复用出一个 I2C 接口(PA3:SCL,PA2&a…...

Idea maven打包时 报错 illegalArgumentException: Malformed \uxxxx encoding 解决方法

1 改变打包命令重新打包 在maven打包命令上加入 -e -X 2 找到报错类和方法 可以看到是 java.util.Properties#loadConvert类方法中有个throw new IllegalArgumentException( "Malformed \\uxxxx encoding."),在此打断点 3 以Debug方式重新运行maven…...

Qt中槽函数在那个线程执行的探索和思考

信号和槽是Qt的核心机制之一,通过该机制大大简化了开发者的开发难度。信号和槽属于观察者模式(本质上是回调函数的应用)。是函数就需要考虑其是在那个线程中执行,本文讨论的就是槽函数在那个线程中执行的问题。 目录 1. connect…...

C++ 类模板

目录 前言 类模板语法 类模板和函数模板的区别 类模板没有自动类型推导的使用方式 类模板在模板参数列表中可以有默认参数 类模板中成员函数创建时机 类模板对象做函数参数 指定传入的类型 参数模板化 整个类模板化 类模板与继承 类模板成员函数类外实现 类模板分…...

边缘计算系统设计与实践

随着科技的飞速发展,物联网和人工智能两大领域的不断突破,我们看到了一种新型的计算模型——边缘计算的崛起。这种计算模型在处理大规模数据、实现实时响应和降低延迟需求方面,展现出了巨大的潜力。本文将深入探讨边缘计算系统的设计原理和实…...

【Spark精讲】Spark存储原理

目录 类比HDFS的存储架构 Spark的存储架构 存储级别 RDD的持久化机制 RDD缓存的过程 Block淘汰和落盘 类比HDFS的存储架构 HDFS集群有两类节点以管理节点-工作节点模式运行,即一个NameNode(管理节点)和多个DataNode(工作节点)。 Namenode管理文件系统的命名空…...

贪心算法:买卖股票的最佳时机II 跳跃游戏 跳跃游戏II

122.买卖股票的最佳时机II 思路: 想要获得利润,至少要以两天为一个交易单元,因为两天才会有股价差。因此可以将最终利润进行分解,如prices[3] - prices[0] (prices[3] - prices[2]) (prices[2] - prices[1]) (prices[1] - pr…...

音频DAC,ADC,CODEC的选型分析,高性能立体声

想要让模拟信号和数字信号顺利“交往”,就需要一座像“鹊桥”一样的中介,将两种不同的语言转变成统一的语言,消除无语言障碍。这座鹊桥就是转换器芯片,也就是ADC芯片。ADC芯片的全称是Analog-to-Digital Converter, 即模拟数字转换…...

python 连接SQL server 请用pymssql连接,千万别用pyodbc

pymssql官方介绍文档 python 使用 pymssql连接 SQL server 代码示例: 安装pymssql包: pip install pymssql代码: import pymssqldef conn_sqlserver_demo():# 连接字符串示例(根据您的配置进行修改)conn Nonetry:co…...

IntelliJ IDEA 自带HTTP Client接口插件上传文件示例

如何使用IntelliJ IDEA自带的HTTP Client接口插件进行文件上传的示例。在这个示例中,我们将关注Controller代码、HTTP请求文件(xxx.http),以及文件的上传和处理。 Controller代码 首先,让我们看一下处理文件上传的Co…...

C++中的接口有什么用

2023年12月13日,周三上午 今天上午在适配器模式,我发现如果想真正理解适配器模式,就必须学会使用C中的接口,就必须明白为什么要在C中使用接口,所以重新学习了一下C中的接口 目录 C中的接口有什么用用代码说明“实现多…...

el-table合并相同数据的单元格

相同的数据合并单元格 <el-table :data"userList" :span-method"objectSpanMethod" border><el-table-column type"selection" width"50" align"center" /><el-table-column label"用户名称" a…...

Verilog Systemverilog define宏定义

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 文章前情预告一、define是个啥&#xff1f;二、为什么要使用define三、怎么使用define四、define的横向拓展五、define思想在生活中的体现!六、结论七、参考资料八、…...

51单片机应用从零开始(十一)·数组函数、指针函数

51单片机应用从零开始&#xff08;九&#xff09;数组-CSDN博客 51单片机应用从零开始&#xff08;十&#xff09;指针-CSDN博客 目录 1. 用数组作函数参数控制流水花样 2. 用指针作函数参数控制 P0 口 8 位 LED 流水点亮 1. 用数组作函数参数控制流水花样 要在51单片机中…...

【PostgreSQL】从零开始:(八)PostgreSQL-数据库PSQL元命令

元命令 postgres# \? General\bind [PARAM]... set query parameters\copyright show PostgreSQL usage and distribution terms\crosstabview [COLUMNS] execute query and display result in crosstab\errverbose show most recent error…...

02 使用Vite创建Vue3项目

概述 A Vue project is structured similarly to a lot of modern node-based apps and contains the following: A package.json fileA node_modules folder in the root of your projectVarious other configuration files are usually contained at the root level, such …...

Shell三剑客:sed(简介)

一、前言 Stream EDitor:流编辑 sed 是一种在线的、非交互式的编辑器&#xff0c;它一次处理一行内容。处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”(pattern space)&#xff0c;接着用sed命令处理缓冲区中的内容&#xff0c;处理完成后&…...

tp连接数据库

ThinkPHP内置了抽象数据库访问层&#xff0c;把不同的数据库操作封装起来&#xff0c;我们只需要使用公共的Db类进行操作&#xff0c;而无需针对不同的数据库写不同的代码和底层实现&#xff0c;Db类会自动调用相应的数据库驱动来处理。采用PDO方式&#xff0c;目前包含了Mysql…...

别再死记硬背了!用数字电路里的‘上升沿’和‘下降沿’来理解epoll的ET模式(附Linux C++代码演示)

从数字电路到高性能IO&#xff1a;用硬件思维理解epoll的边沿触发模式 当你在示波器上观察一个时钟信号时&#xff0c;工程师们最关心的往往不是电平本身的高低&#xff0c;而是电平跳变的瞬间——那个被称为"边沿"的微妙时刻。这种硬件设计中的经典概念&#xff0c;…...

5个实用Babel插件开发案例:从入门到精通转换器实现指南

5个实用Babel插件开发案例&#xff1a;从入门到精通转换器实现指南 【免费下载链接】babel-handbook :blue_book: A guided handbook on how to use Babel and how to create plugins for Babel. 项目地址: https://gitcode.com/gh_mirrors/ba/babel-handbook Babel插件…...

从校园到职场:技术新人必须完成的3个思维转变

从象牙塔迈入软件测试的真实战场&#xff0c;许多技术新人会感到一种强烈的“水土不服”。在学校里&#xff0c;你的目标是交出一份正确的作业或通过一场考试&#xff0c;评价体系清晰且单一。但在职场&#xff0c;测试工程师面对的是不完整的文档、随时变更的需求和“为什么上…...

微信小程序逆向工程终极指南:wxappUnpacker深度解析与实用技巧

微信小程序逆向工程终极指南&#xff1a;wxappUnpacker深度解析与实用技巧 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 微信小程序逆向工程是开发者深入…...

WarcraftHelper技术方案:游戏兼容性修复工具的现代化适配实践

WarcraftHelper技术方案&#xff1a;游戏兼容性修复工具的现代化适配实践 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 随着Windows操作系统和硬件架…...

weave-compose实战:用Docker Compose语法轻松构建多主机容器集群

1. 项目概述与核心价值最近在折腾容器编排&#xff0c;特别是想找一个比Kubernetes更轻量、更贴近Docker原生体验的方案。在GitHub上闲逛时&#xff0c;发现了Adityaraj0421/weave-compose这个项目。乍一看名字&#xff0c;以为是Docker Compose的某个魔改版&#xff0c;但深入…...

星闪测距性能分析

环境HiSpark开发平台&#xff0c;两块BS21E丢包率1分钟内75次测距数据中&#xff0c;约有6次左右的数据是无效或者丢失&#xff0c;可以通过一些滤波算法过滤&#xff0c;完全可以满足小车定位的需要。测距精度目前使用的测距方案是RSSI信号强度与IQ信号结合&#xff0c;精度达…...

Deep3D:开启2D视频实时转3D的视觉革命

Deep3D&#xff1a;开启2D视频实时转3D的视觉革命 【免费下载链接】Deep3D Real-Time end-to-end 2D-to-3D Video Conversion, based on deep learning. 项目地址: https://gitcode.com/gh_mirrors/dee/Deep3D 你是一个文章写手&#xff0c;你负责为开源项目写专业易懂的…...

基于MCP协议快速构建AI助手自定义工具:从入门到生产实践

1. 项目概述&#xff1a;一个为AI助手打造自定义工具的快速启动器如果你正在使用Claude Desktop或者Cursor这类AI编程助手&#xff0c;并且觉得它们内置的功能还不够用&#xff0c;比如你想让它直接查询你项目的数据库、调用某个内部API&#xff0c;或者执行一些特定的文件操作…...

发音人「像真人」之外还要看什么:稳定性与一致性

&#x1f3af; 发音人「像真人」之外还要看什么&#xff1a;稳定性与一致性在文字转语音领域&#xff0c;「像真人」往往是第一印象。然而&#xff0c;当您需要批量生成有声内容、长期使用同一音色时&#xff0c;真正决定体验的是稳定性与一致性。 顶伯文字转语音工具正是围绕这…...