加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 同步关闭时的速度

发布时间:2020-12-16 06:49:51 所属栏目:百科 来源:网络整理
导读:我想使用cout的代码比较C中的printf()和cout速度: #include iostreamint main(){ for(int i=0; i150000; i++) std::cout "Hello!";} 这个代码用于printf(): #include cstdioint main(){ for(int i=0; i150000; i++) printf("Hello!");} 我多次运行这两个程
我想使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读