c – 同步关闭时的速度
我想使用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] 另外,关闭同步通常很好. 另见: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |