有关clock()函数的问题

时间:2011-03-31 01:59:44

标签: visual-c++

为什么在调试模式下执行函数f1()的时间从一次运行变为另一次运行?为什么在发布模式下总是为零?

我没有包含stdio.h和cstdio以及编译的代码。怎么样?

#include <iostream>
#include <ctime>

void f1()
{
    for( int i = 0; i < 10000; i++ );
}

int main()
{
    clock_t start, finish;

    start = clock();
    for( int i = 0; i < 100000; i++ ) f1();
    finish = clock();

    double duration = (double)(finish - start) / CLOCKS_PER_SEC;

    printf( "Duration = %6.2f seconds\n", duration);
}

2 个答案:

答案 0 :(得分:1)

您运行测试代码的机器可能太快了。尝试将循环次数增加到一个非常大的数字。

要尝试的其他事情是使用sleep()函数进行测试。 这应该确认你的clock()测量的行为。

答案 1 :(得分:0)

我相信你在发布模式下看到f1()零运行时的原因是因为编译器正在优化函数。由于您的for循环没有代码块,因此可以在编译期间有效地将其拉出。

我猜测这种优化不是在调试模式下执行的,这可以解释为什么你会看到更长的执行时间。它在运行之间有所不同,因为您的OS调度程序(几乎可以肯定)不能保证进程的固定时隙。

至于为什么在未明确包含printf()时可以使用<cstdio>,这是因为<iostream>包含。

C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ include 查看我的标题,我可以看到 iostream 包含 istream ostream ,两者都包括 ios ,其中包含 xlocnum ,其中包含 cstdlib cstdio