c – 同步关闭时的速度

c – 同步关闭时的速度,第1张

概述我想使用cout的代码比较C中的printf()和cout速度: #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 我想使用cout的代码比较C中的printf()和cout速度:

#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 – 同步关闭时的速度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1224483.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存