有人可以解释两个具有时钟功能的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';
答案 0 :(得分:2)
可能一个不错的优化器会看到循环是一个无操作并完全优化它,所以开始和结束之间几乎没有区别。
如果它没有被优化,那么这两个循环只是简单地解决了30 * 640000000大于可以存储在32位整数中的事实。它运行内部640000000循环30次以尝试放大延迟。
编辑:
因此,对于30次中的每一次(使用变量delay
),它从0开始创建另一个循环(使用变量i
)。然后增加i
640000000次,每个增量占一小部分时间(如果没有优化)。然后内循环完成,delay
增加1,内循环再次从0开始。
EDIT2:
如果您只是尝试添加延迟,是否考虑使用sleep
或usleep
或相应的Windows函数而不是尝试通过迭代实现睡眠?