为什么在调试模式下执行函数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);
}
答案 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