• 输入输出速度统计


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

    输出:

    测试壹:输出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
    ",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.‘ ’换行

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

    测试①:0.1914

    测试②:0.1903

    测试③:0.1917

    测试④:0.188

    测试⑤:0.1872

    平均值:0.18972

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

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

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

    再搜一下百度百科,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 (这个波动也不小)

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

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

  • 相关阅读:
    什么是聚集索引,什么是非聚集索引,什么又是主键?
    给.net添加MultiPage、TabStrip、Toolbar、treeView,treeview等控件
    一个洗牌程序算法,随机交换位置【经典】
    overload和override都叫重载,都在什么情况下用阿?
    补间形状和补间动画
    电子时钟
    绘图板
    查询XML数据
    纯代码生成按钮
    小球滚动,方块上移
  • 原文地址:https://www.cnblogs.com/qiuchengrui/p/11753635.html
Copyright © 2020-2023  润新知