📜  测量C++中函数的执行时间(1)

📅  最后修改于: 2023-12-03 15:27:00.111000             🧑  作者: Mango

测量C++中函数的执行时间

在C++中,我们经常需要对程序的性能进行优化。其中一个重要的任务就是测量函数的执行时间,以便找出程序中的性能瓶颈。本文将介绍如何在C++中测量函数的执行时间。

clock()函数

C++标准库中的clock()函数可以返回程序运行的时钟周期数。我们可以通过记录函数开始和结束时的时钟周期数,计算出函数执行的时钟周期数,从而得到函数的执行时间。

#include <ctime>

void func() {
    // 记录开始时的时钟周期数
    clock_t start = clock();

    // 待测量的函数代码

    // 记录结束时的时钟周期数
    clock_t end = clock();

    // 计算函数执行的时钟周期数
    clock_t cycles = end - start;

    // 计算函数执行的时间(毫秒)
    double time = static_cast<double>(cycles) / CLOCKS_PER_SEC * 1000;

    // 输出函数执行的时间
    std::cout << "func() executed in " << time << " ms." << std::endl;
}

clock()函数返回的是时钟周期数,需要除以CLOCKS_PER_SEC(每秒时钟周期数)才能得到时间(秒),而我们通常需要用毫秒作为时间单位,因此需要乘上1000

需要注意的是,clock()函数返回的时钟周期数可能会受到系统时钟的影响,因此不同的系统和不同的运行环境下,同一段代码的执行时间可能会有所不同。

std::chrono库

C++11引入了std::chrono头文件,提供了一组用于测量时间的类型和函数,可以更加接近真实时间和更加精确地测量函数执行时间。

#include <chrono>

void func() {
    // 记录开始时的时间点
    auto start = std::chrono::high_resolution_clock::now();

    // 待测量的函数代码

    // 记录结束时的时间点
    auto end = std::chrono::high_resolution_clock::now();

    // 计算函数执行的时间(毫秒)
    double time = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

    // 输出函数执行的时间
    std::cout << "func() executed in " << time << " ms." << std::endl;
}

std::chrono::high_resolution_clock::now()函数可以返回当前时间点,它的精度可以达到系统时钟周期以下级别。std::chrono::duration_cast函数可以将两个时间点之间的时间差转化为指定时间单位的持续时间,这里使用了毫秒。

需要注意的是,使用std::chrono库时,不同的编译器和不同的系统可能会有不同的实现,因此可能会对时间精度和准确度产生影响。

总结

在C++中测量函数的执行时间,可以使用clock()函数和std::chrono库。前者精度较低,但在大部分情况下已经够用;后者精度更高,但需要对编译器和系统的实现进行测试和验证。在实际使用中,可以根据需要选择合适的方式进行测量。