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
> ~850
毫秒(5 次运行的平均值)
perfcout
> ~9000
毫秒(5 次运行的平均值)
这是否意味着 printf
比 cout
快 ~10 倍
?
编辑:
使用/Ox、/Ot,发布版本中没有调试信息
并在 perfcout
方法中使用 std::ios_base::sync_with_stdio(false);
,
cout
的结果相同,即 ~9000 毫秒
编辑 2:
总而言之,cout
比 printf
快。上述观察的原因是由于控制台输出。将输出重定向到文件时,事情发生了翻天覆地的变化!
最佳答案
我没有再安装 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 毫秒与 printf
的 460 毫秒相比),但在关闭优化的情况下测量速度是毫无意义的。
启用优化后 cout
以更大的优势获胜(191 毫秒对 printf
365 毫秒)。
为了保持这些有意义,我运行它们时将输出重定向到一个文件。如果没有它,基本上您要测量的只是控制台驱动程序的速度,这基本上是没有意义和值(value)的。
关于c++ - printf 与 cout 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272586/