我长时间使用C++编程。 我一直在想哪个执行速度更快,printf
还是cout
?
情况:我正在使用C++设计应用程序,有一些限制,例如执行时间限制。 我的应用程序在控制台上有许多打印命令。 那么哪个更适合,printf
还是cout
?
我长时间使用C++编程。 我一直在想哪个执行速度更快,printf
还是cout
?
情况:我正在使用C++设计应用程序,有一些限制,例如执行时间限制。 我的应用程序在控制台上有许多打印命令。 那么哪个更适合,printf
还是cout
?
两种方式都有它们自己的开销。根据您要打印的内容,任何一种方式都可能更快。
以下是我想到的两个要点 -
printf()必须解析“格式”字符串并对其进行操作,这会增加成本。
cout具有更复杂的继承层次结构并传递对象。
在实践中,除了最奇怪的情况外,差异都不应该有影响。如果您认为真的很重要-那就测量一下!
编辑 -
哦,见鬼,我不相信我正在做这件事,但出于记录的目的,在我的非常特定的测试用例中,使用MSVC在发布状态下编译 -
打印150,000个“Hello, World!”(不使用endl)大约需要 -
printf()用时90ms,cout用时79ms。
打印150,000个随机双精度数大约需要 -
printf()用时3450ms,cout用时3420ms。
(平均10次运行)。
差异如此微小,这可能意味着什么都没有...
C++的cout输出速度慢是因为默认与stdio同步。
尝试执行以下代码以解决此问题。
ios_base::sync_with_stdio(false)
http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/
另一个Stack Overflow的问题涉及C风格格式化I/O相对于C++ iostreams的速度:
请注意,讨论的基准是针对内存缓冲区的格式化。我猜想,如果你实际上将I/O执行到控制台或文件中,由于I/O占用整体时间的更多部分,相对速度差异会更小。
cout
而不是printf
,因为printf
属于C函数族。有许多对cout
进行的改进,你可能会从中受益。至于速度,由于控制台I / O本来就很慢,所以这不是问题。实际上,我一直发现printf比cout更快。但是,cout在类型安全方面为您提供了更多的帮助。同时请记住,printf是一个简单的函数,而cout是基于复杂流层次结构的对象,所以比较执行时间并不公平。
#include <iostream>
#include <cstdio>
#include <ctime>
using namespace std;
int main( int argc, char * argcv[] ) {
const char * const s1 = "some text";
const char * const s2 = "some more text";
int x = 1, y = 2, z = 3;
const int BIG = 2000;
time_t now = time(0);
for ( int i = 0; i < BIG; i++ ) {
if ( argc == 1 ) {
cout << i << s1 << s2 << x << y << z << "\n";
}
else {
printf( "%d%s%s%d%d%d\n", i, s1, s2, x, y, z );
}
}
cout << (argc == 1 ? "cout " : "printf " ) << time(0) - now << endl;
}
cout和printf在时间上产生相同的结果。