【发布时间】:2016-12-11 12:54:52
【问题描述】:
我运行了以下程序,我的电脑用了 94 秒来执行(我有一个 i5 3.2 GHz cpu 和 4 Gb 内存)。
我认为打印一百万个数字需要 94 秒并不快。有没有办法让它更快?
当我不计算计数器变量时,为什么程序会在 0.016 秒内结束? (它真的会在 0.016 秒的时间段内循环一百万次吗?)
#include <iostream>
int main()
{
for (int counter{1}; counter <= 1e6 ; ++counter)
{
std::cout << counter << " ";
}
return 0;
}
【问题讨论】:
-
you 能否在 94 秒内打印一百万个数字?我认为不是 :-) 更严重的是,是的,输出需要时间,尤其是对图形终端的大规模更新,您基本上是在更新整个屏幕。而且,是的,您的计算机可能 足够快,可以在百分之一秒内完成一百万次迭代。在本地测试它会在 0.008 秒内执行。
-
在屏幕上书写是一个相当缓慢的过程,这就是原因。编译器优化了像“for”这样的循环,所以我认为没有任何方法可以让它更快,除非你想做一些很酷的魔法。
-
一般来说,您不希望优化用户界面以获得超出用户实际感知的性能。用户只是不能在 94 秒内读取一百万个整数,因此整个优化企业毫无意义。将您的计算逻辑与表示逻辑分开。必要时优化计算。
-
谢谢大家!我只是想知道是什么让这个过程变慢了是 cout。几天前我从这里看到了一些源代码,这是一个密码破解程序,旨在尝试所有可能的组合,这让我感到惊讶,因为它在尝试了 350 万种不同的组合后,在 2.5 秒内发现了 5 个字符的长传! (很酷的东西:P)