输入输出速度统计

在学校电脑上跑的文件输入输出。

输出:

测试壹:输出1e6内数字,空格隔开,printf VS cout

1.

freopen("1.txt","w",stdout);
    for(int i=1;i<=1000000;i++){//1e6
        printf("%d ",i);
    }

测试①:2.82

测试②:2.777

测试③:2.847

测试④:2.887

测试⑤:2.797

平均值:2.8256

2.

freopen("1.txt","w",stdout);
    for(int i=1;i<=1000000;i++){
        cout<<i<<' ';
    }

测试①:0.1969

测试②:0.3226

测试③:0.2028

测试④:0.2309

测试⑤:0.1986

平均值:0.23036

小总结:出乎意料……我没关stdout的同步啊,咋快这么多……

测试贰:printf VS cout ,输出1e6内数字,回车隔开

1.

freopen("1.txt","w",stdout);
    for(int i=1;i<=1000000;i++){
        printf("%d\n",i);
    }

测试①:3.073

测试②:2.886

测试③:2.818

测试④:3.145

测试⑤:2.905

平均值:2.9654     小对比:空格和回车对于printf来说变化不大,毕竟只是格式化输出,原理一样。

2.endl换行

freopen("1.txt","w",stdout);
    for(int i=1;i<=1000000;i++){
        cout<<i<<endl;
    }

测试①:3.565

测试②:3.382

测试③:3.568

测试④:3.353

测试⑤:3.458

平均值:3.4652

3.‘\n’换行

freopen("1.txt","w",stdout);
    for(int i=1;i<=1000000;i++){
        cout<<i<<'\n';
    }

测试①:0.1914

测试②:0.1903

测试③:0.1917

测试④:0.188

测试⑤:0.1872

平均值:0.18972

小总结:怎样,惊不惊喜,在未关stdout同步流下,<<'\n'的 cout 仍然比 printf 快,但是 <<endl 却要慢好多……以前我一直以为<<endl与<<‘\n’一样……

那么,cout<<endl慢在哪里呢?

 进入c++库里看一眼(虽然看不懂)可以看出来endl是一个函数模板,在函数中输出了'\n',与情理上来说调用一次函数确实要比只输出一个字符要慢。

再搜一下百度百科,endl的作用为:

1.将换行符写入输出流,并将与设备关联的缓冲区的内容刷到设备中,保证目前为止程序所暂存的所有输出都真正写入输出流。

2.清空输出缓冲区。

好吧(这就涉及到我的知识盲区了,endl确实干了许多事情,但其实只有下划线部分才是我们必须的,缓冲区的问题我们一会再说。

由此可见,以后别乱用 endl ……这会使你的输出效率降低。

测试叁:cout 开关毕同步流 输出1e7 ,空格隔开

1.

freopen("1.txt","w",stdout);
    for(int i=1;i<=10000000;i++){
        cout<<i<<' ';
    }

测试①:2.269

测试②:1.822

测试③:2.413

测试④:2.247

测试⑤:2.624

平均值:2.275  (我另外多跑了几次,发现好不稳定,最慢能到3.6,最快能到1.8,这个数据也算比较适中了)

2.

ios::sync_with_stdio(false);
    freopen("1.txt","w",stdout);
    for(int i=1;i<=10000000;i++){
        cout<<i<<' ';
    }

测试①:2.594

测试②:2.635

测试③:2.122

测试④:2.398

测试⑤:2.067

平均值:2.3632 (这个波动也不小)

小总结:??为什么开关同步流输出一样快?

好像这个同步流只跟读入输出放一起的时候才比较明显?

 

posted @ 2019-10-28 18:10  青珹  阅读(113)  评论(0编辑  收藏
Live2D