📜  c++ 测量时间 - C++ (1)

📅  最后修改于: 2023-12-03 14:59:49.311000             🧑  作者: Mango

C++测量时间

在编写程序时,经常需要测量某个代码块的执行时间。C++提供了多种不同的方式来测量时间,本文将介绍其中的几种常见方法。

使用chrono库

C++11引入了std::chrono库,用于实现时间相关的各种功能。其中最常用的是std::chrono::high_resolution_clock,它提供了高精度的时钟,并支持以纳秒级别的精度计算时间间隔。

以下是一个测量代码块运行时间的示例:

#include <iostream>
#include <chrono>

int main()
{
    auto start = std::chrono::high_resolution_clock::now();

    // 要测量的代码块
    for(int i = 0; i < 10000; ++i) {}

    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double, std::nano> elapsed = end - start;

    std::cout << "Elapsed time: " << elapsed.count() << " ns\n";
}

运行结果:

Elapsed time: 1070.97 ns

由于std::chrono::high_resolution_clock提供了高精度的时钟,通常可以使用它来测量非常短的时间间隔。

使用clock函数

如果不需要太高的精度,可以使用clock函数来测量时间。clock函数返回程序运行的时间(以时钟周期为单位),可以使用CLOCKS_PER_SEC宏将其转换为秒。

以下是一个使用clock函数测量时间的示例:

#include <iostream>
#include <ctime>

int main()
{
    std::clock_t start = std::clock();

    // 要测量的代码块
    for(int i = 0; i < 1000000; ++i) {}

    std::clock_t end = std::clock();
    double elapsed = (end - start) / (double)CLOCKS_PER_SEC;

    std::cout << "Elapsed time: " << elapsed << " s\n";
}

运行结果:

Elapsed time: 0.008 s

由于clock函数的精度不够高,通常只适用于测量较长的时间间隔。

使用time函数

time函数可以获取当前的时间戳,并可以用于计算时间间隔。但是它的精度很低,通常只适用于测量较长的时间间隔。

以下是一个使用time函数测量时间的示例:

#include <iostream>
#include <ctime>

int main()
{
    std::time_t start = std::time(nullptr);

    // 要测量的代码块
    for(int i = 0; i < 10000000; ++i) {}

    std::time_t end = std::time(nullptr);
    double elapsed = std::difftime(end, start);

    std::cout << "Elapsed time: " << elapsed << " s\n";
}

运行结果:

Elapsed time: 1 s
总结

本文介绍了使用std::chrono库、clock函数和time函数三种测量时间的方法。开发者可以根据需要选择合适的方法来测量程序的运行时间,以便更好地分析和优化程序。