C++中推荐用std::chrono::steady_clock测运行时间,精度高且不受系统时间干扰;需多次运行取中位数或去极值平均,并在-O2/O3优化下终端直接执行以避免干扰。

在C++中计算程序运行时间,最常用且推荐的方式是使用 库——它精度高、跨平台、类型安全,适合现代C++性能分析。
用 std::chrono 测量精确耗时
std::chrono 提供了纳秒级(取决于硬件和系统)的高精度时钟。核心思路是:在代码段前后分别获取时间点,相减后转换为所需单位(如毫秒、微秒)。
- 推荐使用
std::chrono::high_resolution_clock(或更明确的steady_clock,避免系统时间跳变影响) - 用
time_point记录起止时刻,用duration_cast转换单位 - 注意:不要用
system_clock测性能,它可能受系统时间调整干扰
示例:
auto start = std::chrono::steady_clock::now();
// ... 待测代码
auto end = std::chrono::steady_clock::now();
auto ms = std::chrono::duration_cast<:chrono::milliseconds>(end - start).count();
std::cout
多次运行取平均值,减少偶然误差
单次测量易受系统调度、缓存预热、CPU频率波动等干扰。真实性能分析应重复执行多次,排除异常值后取平均或中位数。
立即学习“C++免费学习笔记(深入)”;
- 建议至少运行 10–100 次(视函数执行速度而定)
- 记录每次耗时,去掉最高/最低的 10%(或直接取中位数),再求平均
- 确保每次运行前状态一致(例如清空相关缓存、重置数据结构)
避免常见干扰因素
测出“假慢”或“假快”往往不是代码问题,而是测量方式不当:
- 编译时关闭优化(
-O0)会严重失真;性能分析应在-O2或-O3下进行 - 调试器(如 GDB)或 IDE 内置运行器可能引入额外开销,尽量用终端直接运行可执行文件
- I/O、内存分配、随机数生成等操作本身波动大,必要时单独隔离测试
- 避免在测量区间内打印输出、调用
std::endl(会强制刷新缓冲区)
进阶:用性能分析工具辅助定位瓶颈
chrono 适合粗粒度计时,但要深入知道哪一行/哪个函数最慢,需借助专业工具:











