具有时钟功能的for循环之间的交互?

时间:2010-06-10 17:59:34

标签: c++ ia-32

有人可以解释两个具有时钟功能的for循环之间的延迟上下文中的确切交互。 for1如何在cout语句中与for2交互(在640000000上为30)?

start=clock();
cout<<endl<<start<<endl;
for(delay=0; delay<30; delay++)
    for(i=0; i<640000000; i++);

end=clock();
cout<<end<<endl;
cout<<"Num of ticks for non reg-loop: ";
cout<<end-start<<'\n';

1 个答案:

答案 0 :(得分:2)

可能一个不错的优化器会看到循环是一个无操作并完全优化它,所以开始和结束之间几乎没有区别。

如果它没有被优化,那么这两个循环只是简单地解决了30 * 640000000大于可以存储在32位整数中的事实。它运行内部640000000循环30次以尝试放大延迟。

编辑: 因此,对于30次中的每一次(使用变量delay),它从0开始创建另一个循环(使用变量i)。然后增加i 640000000次,每个增量占一小部分时间(如果没有优化)。然后内循环完成,delay增加1,内循环再次从0开始。

EDIT2: 如果您只是尝试添加延迟,是否考虑使用sleepusleep或相应的Windows函数而不是尝试通过迭代实现睡眠?