在Windows操作系统下如何测量C语言程序的执行时间

5

在Windows上,有比clock()gettickcount()函数更好的测量时间的方法吗? 当我尝试使用这些函数进行短操作时,它显示运行时间为0.0秒。 我需要一种以毫秒或纳秒为单位测量时间的方法。

2个回答

14

你可以使用 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;
}

这段代码在顺序查找中可以正常工作。但是当我将其与“二分查找”代码一起使用时,它会出现程序停止运行的错误。可能是什么问题? - Bar
以上代码已经测试过,如果你有问题,那么问题就在其他地方。调试你的“二分查找”...或者,将你的问题作为一个新的StackOverflow问题提出 - masoud
2
“interval” 应该以秒为单位(根据 此答案QueryPerformanceFrequency 的文档)。 - pcworld
请注意,如果硬件不支持,则频率可能为0。因此最好添加一个检查以确保它不是0。 - Tal Jerome
在MSVC中,我了解到clock()提供的是墙上时间而不是执行时间。我尝试使用QPC方法以获得一致的计时(用于分析),但遗憾的是测量时间也会有所变化。这适用于1秒或更长时间段,并且对于每次运行完全相同的操作,因此不能测量执行时间。因此,我仍然需要进行多次运行并记录最短时间。 - Weather Vane

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接