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

Ehs*_*nas 12 c c++ io performance

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

int Num = 20000000;
vector <int> v;
for ( int i = 0; i < Num; i++ )
{
    v.push_back(i);
}
Run Code Online (Sandbox Code Playgroud)

现在我运行两个单独的代码,一个用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;
Run Code Online (Sandbox Code Playgroud)

和一个在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);
Run Code Online (Sandbox Code Playgroud)

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

shf*_*301 23

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

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

  • @ user2345493你不需要`endl`,你可以使用``\n"`代替.请参见http://stackoverflow.com/questions/213907/c-stdendl-vs-n (3认同)