
#include <iostream>int main(){ for(int i=0; i<150000; i++) std::cout << "Hello!";} 这个代码用于printf():
#include <cstdio>int main(){ for(int i=0; i<150000; i++) printf("Hello!");} 我多次运行这两个程序,这是结果(使用g编译器):
cout:17.116s
printf():9.153
所以print()比cout快两倍.我在stackoverflow中搜索了这种行为背后的原因,我发现print()比cout更快,因为它是一个函数,而cout是一个对象.但我也了解到cout速度较慢,因为它与标准C流同步.
所以我接下来要做的是使用以下代码关闭所有iostream标准流与相应标准C流的同步:
#include <iostream>#include <ios>int main(){ std::ios_base::sync_with_stdio(false); for(int i=0; i<150000; i++) std::cout << "Hello!";} 令人惊讶的是,这就是我得到的:
printf():9.153
同步的cout:17.116s
cout同步关闭:1.146s
哇!这是一个巨大的差异!
所以我的问题是:始终关闭同步会是一个好习惯吗?
提前致谢.
解决方法 它取决于您是否预期输出必须是否有序.如果您使用输出流混合C风格或其他输出.您不希望始终关闭同步.
你不想在什么时候把它关掉.
>您正在将Cout与其他流输出功能混合使用.比如,scanf / printf,gets / puts,getchar / putchar ……)和C风格的IO(cin / cout ……)[1]
>您正在使用具有输出的线程,您希望获得良好的输出.
“同时访问同步流(即,此函数返回true的流)从不引入数据争用:字符是单独读取/写入的,尽管线程之间的顺序没有进一步保证.这可能导致线程之间出现交错字符,除非正确同步该程序强制执行整个 *** 作.“[1]
另外,关闭同步通常很好.
另见:
http://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio
以上是内存溢出为你收集整理的c – 同步关闭时的速度全部内容,希望文章能够帮你解决c – 同步关闭时的速度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)