void perfprint(unsigned int count)
{
char a[100] = "fosjkdfjlsjdflw0304802";
for(unsigned int i = 0;i<count;++i)
{
printf("%s", a);
}
}
void perfcout(unsigned int count)
{
char a[100] = "fosjkdfjlsjdflw0304802";
for(unsigned int i = 0;i<count;++i)
{
cout << a;
}
}
环境:C ++,VS 2010,Windows 7,32位,Core-i7,4GB,3.40 GHz
我使用count = 10000
测试了两个函数,每个5
次。
使用QueryPerformanceCounter
测量效果。
perfprint&gt; ~850
毫秒(平均5次运行)
perfcout&gt; ~9000
毫秒(平均5次运行)
这是否意味着printf比cout
更快~10x
修改
使用/ Ox,/ Ot,Release build中没有调试信息
并在perfcout方法中使用std::ios_base::sync_with_stdio(false);
,
cout
的结果相同,即~9000 millisecs
编辑2:
总而言之,cout
比printf
更快。上述观察的原因是由于控制台输出。当将输出重定向到文件时,事情开始转向!
答案 0 :(得分:5)
我没有安装VS 2010,但是我对VS 2013和2015进行了快速测试。我稍微修改了你的代码以减少重复,并包含时序代码,这样做:
#include <iostream>
#include <cstdio>
#include <chrono>
#include <string>
template <class F>
int perf(F f) {
using namespace std::chrono;
const int count = 1000000;
char a[100] = "fosjkdfjlsjdflw0304802";
auto start = high_resolution_clock::now();
for (unsigned i = 0; i < count; i++)
f(a);
auto end = high_resolution_clock::now();
return duration_cast<milliseconds>(end - start).count();
}
int main() {
std::cerr << "cout: " << perf([](char const *a) { std::cout << a; }) << "\n";
std::cerr << "printf: " << perf([](char const *a) { printf("%s", a); }) << "\n";
}
关闭优化功能后,cout
显示速度稍快一些(例如,358 ms与printf
相比为460),但关闭优化后的测量速度毫无意义。
优化开启cout
赢得更大的保证金(191毫秒vs printf
365毫秒)。
为了保持这些意义,我将它们全部运行,并将输出重定向到文件。没有它,基本上所有你测量的都是控制台驱动程序的速度,这基本上没有意义且毫无价值。