ios_base::sync_with_stdio(false) 使写入速度变慢?

ios_base::sync_with_stdio(false) making writes slower?

提问人:arielCo 提问时间:12/11/2014 最后编辑:CœurarielCo 更新时间:11/12/2018 访问量:579

问:

我写了一些最小的代码来测试设置的效果:std::ios_base::sync_with_stdio(false)

#include <iostream>
#include <string>

int main() {
    std::string line;

#ifdef NO_SYNC_STDIO
    std::ios_base::sync_with_stdio(false);
#endif

#ifdef READ
    while (std::getline(std::cin, line))
#else
    line = "123456";
    for (int i=0; i<10000000; i++)
#endif

#ifdef WRITE
        std::cout << line << "\n";
#else
        1;
#endif

    return 1;
}

这些是以下结果:time [yes 123456 | sed 10000000q | ] ./stdstream-dummy > /dev/null

      -DREAD -DWRITE  -DREAD   -DWRITE
real     24.963s      4.622s   0.950s
user     22.514s      6.732s   0.942s
sys       4.825s      0.313s   0.008s

跟:-DNO_SYNC_STDIO

      -DREAD -DWRITE  -DREAD   -DWRITE
real     38.327s      1.865s   1.223s
user     29.835s      3.990s   1.180s
sys      10.875s      0.351s   0.043s

可以看出,如果我必须写作,时间会减少一点。有什么见解吗?

一些额外的信息:

$ g++ --version
g++ (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
Copyright (C) 2004 Free Software Foundation, Inc.

$ uname -a
SunOS cfprepagop01 5.10 Generic_148888-05 sun4v sparc sun4v

$ ldd stdstream-dummy
    libstdc++.so.6 =>        /usr/sfw/lib/libstdc++.so.6
    libm.so.2 =>     /lib/libm.so.2
    libgcc_s.so.1 =>         /usr/sfw/lib/libgcc_s.so.1
    libc.so.1 =>     /lib/libc.so.1
    /lib/libm/libm_hwcap1.so.2
    /platform/sun4v/lib/libc_psr.so.1
C++ IOstream

评论

2赞 David G 12/11/2014
我知道题外话,但怎么可能? 在 IT 及其派生类中声明并只能作为静态成员函数访问。std::sync_with_stdiosync_with_stdioios_base
0赞 arielCo 12/11/2014
我也在想同样的问题;我能得到的最接近的是.也许知识渊博的人会启发我们。cout.sync_with_stdio(false)
0赞 David G 12/11/2014
cout是 的派生类,所以这是有道理的。它可能只是您的实现的一个规定(坦率地说,这已经过时了)。basic_ostreamios_base
0赞 arielCo 12/11/2014
哦,我明白你的意思了!我粘贴了不工作的代码。将立即修复。

答: 暂无答案