【发布时间】:2016-02-25 02:03:55
【问题描述】:
我正在使用 C++ 编程并在优化领域实现大规模算法。我有一个巨大的while循环,里面有很多东西。循环的条件只是比较两个整数a 和b。我分两点报告时间:
1- 当程序到达while循环结束时。
2- 当程序处于 while 循环的开头时。
代码如下
while (a<b){
//Report time at the beginning of the loop
time_t beginT = time(0);
char* dtBegin = ctime (&beginT);
cout << "Time at the beginning of the loop: " << dtBegin << endl;
.
.
. //all of the other functions inside the loop
//Report time at the end of the loop
time_t endT = time(0);
char* dtEnd = ctime (&endT);
cout << "Time at the end of the loop: " << dtEnd << endl;
}
当程序到达循环结束时,需要很长时间才能回到循环的开头,即对于大型输入实例可能需要大约 20 分钟。需要强调的是,循环内的所有操作都执行完毕并报告了时间,而这20分钟只是让程序回到循环的开头。
我想知道这段时间花在什么上面,我该如何减少它?
感谢任何帮助。
附:循环中的点表示代码中不能共享的机密部分。
【问题讨论】:
-
您在哪个平台上运行此程序,该系统的负载是多少?
-
一些事情。您确定您的消息会立即刷新(例如,在终端上,行缓冲有效,但输出到日志需要显式刷新)?如果您有 大 数据,您是否在分页/交换(例如 10GB RAM 但使用 50GB 交换)? 可能需要 20 分钟才能调出/调入。虽然您不能发布专有代码,但几轮的时间消息怎么样?这显示了时间在“循环”和开始/停止时间。
-
这种行为通常是由内存管理引起的......但是20分钟?那只能是交换。 RAM 碎片整理不需要 20 分钟...
-
在循环范围内创建的任何对象都将在右大括号处销毁。如果这些内容庞大且复杂,则可能需要一段时间。
-
如果将
std::cout替换为std::cerr会怎样?
标签: c++ performance loops time while-loop