printf vs cout表现

dee*_*ive 1 c++ windows

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

环境:C++,VS 2010,Windows 7,32位,Core-i7,4GB,3.40 GHz

我测试了与功能count = 100005次,每次.使用测量性能QueryPerformanceCounter.

perfprint> perfprint毫秒(5次运行的平均值)

perfcout> ~850毫秒(5次运行的平均值)

这是否意味着printf perfcout比cout更快

编辑:

使用/ Ox,/ Ot,Release版本中没有调试信息

并用~9000在perfcout方法,结果是为相同printf,即~10x

编辑2:

总而言之,cout比快std::ios_base::sync_with_stdio(false);.上述观察的原因是由于控制台输出.当将输出重定向到文件时,事情开始转向!

Jer*_*fin 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";
}
Run Code Online (Sandbox Code Playgroud)

关闭优化后,cout显示速度稍快一些(例如,358 ms与460相比)printf),但关闭优化后的测量速度毫无意义.

随着优化开启cout赢得了更大的利润(191毫秒对365毫秒printf).

为了保持这些意义,我将它们全部运行,并将输出重定向到文件.没有它,基本上你所测量的就是控制台驱动程序的速度,这基本上没有意义且毫无价值.