不能稳定测到纳秒——其底层依赖平台,Linux 纳秒级但 Windows 实际抖动约 100 ns;需检查 clock::period 验证理论分辨率,并通过多次测量取最小值、避免非确定性操作来提升可靠性。

std::chrono::high_resolution_clock 能否稳定测到纳秒?
不能直接依赖它返回纳秒级真实精度——std::chrono::high_resolution_clock 是类型别名,底层可能映射到 std::chrono::steady_clock 或 std::chrono::system_clock,具体取决于平台。Linux 上通常基于 CLOCK_MONOTONIC,分辨率可达纳秒量级;Windows 上在较新版本(Win10 1809+)用 QueryPerformanceCounter,理论分辨率约 100 ns,但实际抖动常见。关键点:它提供的是「时钟滴答间隔」,不是「测量误差上限」。
实操建议:
- 用
std::chrono::high_resolution_clock::period::num和::den检查实际周期,例如1/1000000000表示 1 纳秒基准(但不保证硬件真能分辨) - 单次测量易受调度、缓存预热、分支预测失败干扰,必须重复多次取最小值或中位数
- 避免在测量块内触发内存分配、系统调用、锁竞争等非确定性操作
怎么写一个可靠的纳秒级计时代码块封装?
手写 RAII 计时器比临时写两行 time_point 更安全,能自动处理构造/析构时的起止时间,并防止忘记 stop。
示例(C++17 起可用):
std::chrono::nanoseconds
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











