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上的运行结果如下所示:
《C++中计算程序的运行时间》

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

    原文作者:peng1ei
    原文地址: https://blog.csdn.net/pl20140910/article/details/82901311
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞