Windows下Mingw编译时如何用std::chrono测量C++函数执行时间
问题1:代码可用性说明
你的代码只要补全依赖头文件就可以正常使用,完全满足测试需求:
- 缺少
<iomanip>头文件引入:你代码中用到的std::setw、std::setfill均定义在该头文件中,未引入会导致MinGW编译报错,添加后即可正常编译运行。 - 即便你不需要纳秒/微秒级精度也不影响使用:
duration_cast转换为纳秒只是统一计算单位,不会带来额外的功能问题,测试场景下完全够用。
问题2:三种时钟选型建议
三种时钟的特性和适用场景区别如下,你做耗时测试优先选std::chrono::steady_clock即可:
std::chrono::system_clock:对应系统的本地挂钟时间,允许被系统修改,比如手动调整系统时间、NTP网络时间同步都会导致该时钟的数值跳变,甚至出现时间倒退,完全不适合用来统计程序运行的时间间隔。std::chrono::steady_clock:是专门为统计时间间隔设计的单调时钟,保证只会正向增长,不会被系统时间调整影响,精度足够满足绝大多数程序耗时测试需求,Windows下MinGW的实现也非常稳定。std::chrono::high_resolution_clock:是当前系统精度最高的时钟的别名,但不同平台实现规则不统一:Windows下多数MinGW版本会把它别名到steady_clock,也有少数实现会别名到system_clock,反而可能引入时间跳变的坑,稳定性不如直接用steady_clock。
内容的提问来源于stack exchange,提问作者ssd
相关产品推荐
相关产品推荐

