为什么C ++输出比C慢得多?

我实际上是C ++的粉丝,但今天我发现程序的文件输出非常慢。 所以,我设计了一个实验来比较C ++文件输出的速度和C.假设我们有这段代码:

int Num = 20000000; vector  v; for ( int i = 0; i < Num; i++ ) { v.push_back(i); } 

现在我运行两个单独的代码,一个用C ++编写:

 int now = time(0); cout << "start" << endl; ofstream fout("c++.txt"); for(size_t i = 0; i < v.size(); ++i) { fout<< v[i] << endl; } fout.close(); cout << time(0) - now << endl; 

和一个在C:

 int now = time(0); printf("start\n"); FILE *fp = fopen("c.txt", "w"); for(size_t i = 0; i < v.size(); ++i) { fprintf(fp, "%d\n", v[i]); } fclose(fp); printf("%ld\n", time(0) - now); 

C ++程序工作速度惊人的慢! 在我的系统上,C程序在3秒内运行,而C ++程序运行大约需要50秒! 这有什么合理的解释吗?

这很可能是因为您在C ++代码中将流刷新到磁盘的频率。 将endl插入流中会插入新行并刷新缓冲区,而fprintf不会导致缓冲区刷新。

因此,您的C ++示例执行20,000,000次缓冲区刷新,而C示例仅在文件处理缓冲区已满时刷新到磁盘。