C++ Performance with/without “cout”
大家好。
我的问题很简单,但我没有答案。下面你可以看到我的C++代码——它有一点大但很简单——当我用EDCOX1,0代码运行代码时,它运行不到1秒,当我不评论它行大约2分钟(我谈到释放,因为在调试中运行更多的时间)。请注意,该行只产生很少的输出行(所以问题不是程序必须调用"cout"太多次)谢谢大家。这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <cstdlib> #include <iostream> using namespace std; struct cell { int x; int y; }; int main(int argc, char** argv) { cell vector[8]; unsigned long int yy=0; for (int aaa = 0; aaa < 8; aaa++) { vector[0].x = aaa; for (int aab = 0; aab < 8; aab++) { vector[0].y = aab; for (int aac = 0; aac < 8; aac++) { vector[1].x = aac; for (int aad = 0; aad < 8; aad++) { vector[1].y = aad; for (int aae = 0; aae < 8; aae++) { vector[2].x = aae; for (int aaf = 0; aaf < 8; aaf++) { vector[2].y = aaf; for (int aag = 0; aag < 8; aag++) { vector[3].x = aag; for (int aah = 0; aah < 8; aah++) { vector[3].y = aah; for (int aai = 0; aai < 8; aai++) { vector[4].x = aai; for (int aaj = 0; aaj < 8; aaj++) { vector[4].y = aaj; for (int aak = 0; aak < 8; aak++) { vector[5].x = aak; for (int aal = 0; aal < 8; aal++) { vector[5].y = aal; yy++; if(yy%10000000000==0){ vector[5].y = aal-1; //std::cout<<yy<<endl; } } } } } } } } } } } } } std::cout<<yy<<endl; std::cout<<vector[5].y<<endl; return 0; } |
大多数这是一个简单的优化问题:只要不从循环中产生任何输出,编译器就确定循环基本上是死代码,并且根本不执行它们。它需要做一些预计算来确定
当您在循环中生成可见的输出时,编译器不能仅仅取消执行它们,因此代码运行速度会显著减慢。