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

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

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

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

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

#include 
...
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 上,如果有需要的读者可以直接拿来使用。

基于,将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上的运行结果如下所示:
C++中计算程序的运行时间_第1张图片

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

你可能感兴趣的:(C/C++)