给定以下非常简单的for循环:
int main (void) {
    for (int i = 0 ; i < 1000000; i++) {
         std::cout<<i<<std::endl;
    }
}使用2012在干净的Windows 8专业版上运行此代码,每100 k打印大约需要15秒。
在mac x上,使用同一台计算机,xcode只需3秒就能输出1条生产线。
我几乎100%肯定它与性能无关,它只是一些与输出机制或其他相关的东西。
有人能确认一下吗..?只是想知道我的窗户和视觉工作室都很好。
发布于 2013-07-23 17:58:16
std::endl冲线。这样做是相当昂贵的。
试着做:
std::cout << i << '\n';在大多数其他通常的交互式I/O场景中,std::endl与std::cout一起使用时是多余的,因为来自std::cin的任何输入、输出到std::cerr或程序终止都会强制调用std::cout.flush()。 使用std::endl代替'\n',在某些来源的鼓励下,可能会显著降低输出性能。
来源
编辑:输出操作成本很高,取决于外部因素。这就是为什么这里速度慢的原因。例如,正在使用的终端应用程序可能是导致某些性能问题的因素。
通过将输出重定向到/dev/null/,可以避免这种情况:
./a.out > /dev/null关于输出性能,您可以阅读以下内容:http://codeforces.com/blog/entry/5217
发布于 2013-07-23 18:15:06
请注意,就我而言,这是更多的猜测,但仍然是:
我怀疑的是差别(顺便说一下)。Windows / OSX) ),在总体运行时,您的小测试程序与相应编译器生成的代码没有任何关系。
根据我在windows上输出控制台的经验,我强烈怀疑这里的“瓶颈”是将您的程序中的字符数据铲到Windows和显示它的cmd.exe。
可以简单地说,OSX上的控制台/shell/bash接受程序输出的速度比Windows控制台快得多。
您可以尝试的是将此程序的输出重定向到一个文件(在CLI test.exe > output.txt上启动时使用重定向),并查看是否以这种方式测量任何差异。
https://stackoverflow.com/questions/17817456
复制相似问题