提问人:arielCo 提问时间:12/11/2014 最后编辑:CœurarielCo 更新时间:11/12/2018 访问量:579
ios_base::sync_with_stdio(false) 使写入速度变慢?
ios_base::sync_with_stdio(false) making writes slower?
问:
我写了一些最小的代码来测试设置的效果: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
答: 暂无答案
评论
std::sync_with_stdio
sync_with_stdio
ios_base
cout.sync_with_stdio(false)
cout
是 的派生类,所以这是有道理的。它可能只是您的实现的一个规定(坦率地说,这已经过时了)。basic_ostream
ios_base