C++中计算程序的运行时间

在我们实际开发中,尤其对于算法工程师来说,有时候为了比较不同的算法或者优化算法,需要计算各个算法运行的时间或者关键代码段的运行时间,以此来衡量算法在速度上的优劣或者进行代码优化时的一个参考。

因此对于程序员来说,如何计算程序的运行时间就是一个需要解决的基本问题了。对于C++来说,在C++11之前并没有与时间相关的直接的标准库,基本上是使用C语言中对时间进行处理的相关功能,或者直接使用和平台相关的系统API。

然而在C++11之后,C++标准库提供了一个用来处理日期和时间的程序库,常被称为chrono程序库,因为它的特性被定义于<chrono>。有了这个程序库,就不用再去寻找关于不同平台的时间处理API了,直接支持跨平台,现在想想,使用C++(尤其是Modern C++)是多么舒服的一件事呀。

好了,现在我们可以直接使用<chrono>库中提供的相关功能来进行程序运行时间的测量了,如:

#include <chrono>
...
auto start = std::chrono::steady_clock::now();

for (int i = 0; i < 1024; ++i) {
	std::cout << "hello C++11 !" << std::endl;
}

auto end = std::chrono::steady_clock::now();
std::chrono::duration<double, std::micro> elapsed = end - start; // std::micro 表示以微秒为时间单位
std::cout<< "time: "  << elapsed.count() << "us" << std::endl;
...

现在可以对需要进行测量的代码段或算法按如上方法进行测量,二话不说,拿起键盘就是复制粘贴,额…

当然可以按照上述方式去做,但是为了今后使用的方便以及代码的复用,所以对其进行了一个简单的封装,并将其放在了我的 Github 上,如果有需要的读者可以直接拿来使用。

基于<chrono>,将C++程序运行时间的计算封装成了AlgoTime模板类,支持以不同的时间单位进行计算,比如纳秒、微妙、毫秒、秒等等;另外也可以直接使用像 AlgoTimeNs(纳秒)、AlgoTimeUs(微秒)、AlgoTimeMs(毫秒)等类型,具体实现可参见源码

下面就以AlgoTimeUs为例子,做一个简单的使用示例:

#include "MeasureAlgoTime.hpp"
int main() {
	// 创建一个以“微秒”为单位的算法时间对象
	// 当然也可以使用其它时间单位的时间对象,如毫秒、秒等
	Tools::Time::AlgoTimeUs time;
	
	// 启动计时
	time.start();
	for (int i = 0; i < 1024; ++i) {
		std::cout << "hello C++11 !" << std::endl;
	}

	// 直接在标准输出设备中输出程序的运行时间
	time.printElapsed();
	
	// 或者使用以下方式进行运行时间的输出
	auto elapsed = time.elapsed();
	std::cout << elapsed << "us" << std::endl;
	
	return 0;
}

gcc 7.3.0上的运行结果如下所示:
在这里插入图片描述

源码链接:https://github.com/peng1ei/MeasureAlgoTime

  • 23
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值