我想比较printf()的和COUT速度在C++中使用COUT此代码: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!");
}
我跑两个程序多次,这是结果(用克++编译器):
COUT:17.116s
的printf():9.153
所以打印()比COUT快两倍。我搜索在计算器对这种行为背后的原因,我发现打印()快于COUT因为它的一个功能,而COUT是一个对象。但我也了解到,cout比较慢,因为它与标准C流同步。
因此,我所做其次是其相应的标准C关闭同步所有的iostream标准流的流使用此代码:
#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
WOW!这是一个巨大的差异!
所以我的问题是:总是关闭同步是一个好习惯吗?
在此先感谢。
为打印到标准输出你的程序的主要部分?那么是的,这可能是一个好主意, –
“这将是一个很好的做法*总是* ...”。不,不管问题如何结束,永远不会有一个解决方案总是*正确的。 – kay
一些评论:这样的时间很大程度上取决于1)标准输出插入到2)平台3)标准库实现。此外,您并不总是有选择关闭同步(例如,它必须在程序的开始处完成)。与C流同步也是一个很好的功能,特别是如果您调用执行IO的C库时。 –