【问题标题】:Measure execution time in C (on Windows)在 C 中测量执行时间(在 Windows 上)
【发布时间】:2013-03-21 04:12:52
【问题描述】:

有没有比 Windows 上的 clock() 函数更好的函数或方法来测量时间?我有一个简短的操作,当我尝试 clock()gettickcount() 时,它说它需要 0.0 秒。我需要一种以毫秒或纳秒为单位来衡量它的方法。

【问题讨论】:

    标签: c windows execution-time


    【解决方案1】:

    您可以使用QueryPerformanceCounterQueryPerformanceFrequency

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main(void)
    {
        LARGE_INTEGER frequency;
        LARGE_INTEGER start;
        LARGE_INTEGER end;
        double interval;
    
        QueryPerformanceFrequency(&frequency);
        QueryPerformanceCounter(&start);
    
        // code to be measured
    
        QueryPerformanceCounter(&end);
        interval = (double) (end.QuadPart - start.QuadPart) / frequency.QuadPart;
    
        printf("%f\n", interval);
    
        return 0;
    }
    

    【讨论】:

    • 这适用于顺序搜索代码。但是当我将它与“二进制搜索”代码一起使用时,它会导致程序停止运行错误。可能是什么问题?
    • 上面的代码已经过测试,如果有问题,在别的地方。调试你的“二分搜索”...或者,ask your problem as a new StackOverflow question.
    • interval 应该以秒为单位(根据this answerQueryPerformanceFrequency's documentation
    • 请注意,如果硬件不支持,频率可能为 0。所以最好添加一个检查它不是0,
    • 在 MSVC 中,我知道clock() 给出的是挂墙时间而不是执行时间。我尝试了这种 QPC 方法,希望获得一致的时间(用于分析),但遗憾的是这里测量的时间也不同。这是针对 1 秒或更长时间的周期,以及每次运行时完全相同的操作,因此它不能测量执行时间。所以我还是要跑几次,记录最短的时间。
    【解决方案2】:

    您可以使用QueryPerformanceCounter 结合QueryPerformanceFrequency 来获得纳秒级精度。

    【讨论】:

      猜你喜欢
      • 2016-06-15
      • 2011-04-23
      • 1970-01-01
      • 2022-01-03
      • 2023-03-09
      • 2021-07-03
      相关资源
      最近更新 更多