c++高精度快速测量某段代码的执行耗时

#ifndef INIT_TIMER
#define INIT_TIMER(name) \
    std::chrono::high_resolution_clock::time_point timerStart##name = std::chrono::high_resolution_clock::now();
#endif // !INIT_TIMER

#ifndef STOP_TIMER
#define STOP_TIMER(name, title)                                                                                                                              \
    float timerDuration##name = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - timerStart##name).count(); \
    LOG_S(INFO) << "RUNTIME of " << title << ": "                                                                                                            \
                << timerDuration##name                                                                                                                       \
                << " ms " << std::endl;
#endif // !STOP_TIMER

这段代码定义了两个用于 计时(测量代码运行时间) 的宏(INIT_TIMERSTOP_TIMER),通常用于性能分析或调试阶段,方便快速测量某段代码的执行耗时。


宏功能解释:

✅ 1. INIT_TIMER(name)

#define INIT_TIMER(name) \
    std::chrono::high_resolution_clock::time_point timerStart##name = std::chrono::high_resolution_clock::now();
  • 宏功能:记录当前时间为“起始时间”

  • timerStart##name:宏拼接,比如 INIT_TIMER(foo) → 定义 timerStartfoo

  • 使用了 std::chrono::high_resolution_clock::now():高精度时间戳


✅ 2. STOP_TIMER(name, title)

#define STOP_TIMER(name, title)                                                                                                                               \
    float timerDuration##name = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - timerStart##name).count(); \
    LOG_S(INFO) << "RUNTIME of " << title << ": "                                                                                                             \
                << timerDuration##name                                                                                                                        \
                << " ms " << std::endl;
  • 宏功能:记录当前时间,计算和 INIT_TIMER 之间的时间差(单位:毫秒)

  • 打印格式化的日志信息,含耗时

  • LOG_S(INFO):使用了 glogspdlog 等日志库的宏方式打印日志


✅ 使用示例:

INIT_TIMER(foo);

// 你的代码
heavyComputation();

STOP_TIMER(foo, "heavyComputation");

输出:

RUNTIME of heavyComputation: 153 ms

✅ 应用场景:

场景 说明
性能调试 快速找出耗时较高的函数或代码块
多线程执行耗时分析 不影响主流程逻辑的计时
测试不同算法效率 比较多个函数的执行时间

✅ 优点:

  • 非侵入式,快速插入/移除

  • 使用宏 + 高精度时间,方便而高效

  • 日志输出清晰明确

你可能感兴趣的:(c++,c++,开发语言)