c – printf比std :: cout快5倍以上?

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>

int main(int argc,char* argv[])
{
    std::clock_t start;
    double duration;    

    std::cout << "Starting std::cout test." << std::endl;
    start = std::clock();

    for (int i = 0; i < 1000; i++)
    {
        std::cout << "Hello,World! (" << i << ")" << std::endl;
    }

    duration = (std::clock() - start) / (double) CLOCKS_PER_SEC;

    std::cout << "Ending std::cout test." << std::endl;
    std::cout << "Time taken: " << duration << std::endl;

    std::system("pause");

    std::cout << "Starting std::printf test." << std::endl;
    start = std::clock();

    for (int i = 0; i < 1000; i++)
    {
        std::printf("Hello,World! (%i)\n",i);
        std::fflush(stdout);
    }

    duration = (std::clock() - start) / (double) CLOCKS_PER_SEC;

    std::cout << "Ending std::printf test." << std::endl;
    std::cout << "Time taken: " << duration << std::endl;

    system("pause");

    return 0;
}

现在,这里是前五场的时代:

> std :: cout test:1.125 s; printf测试:0.195秒
> std :: cout test:1.154 s; printf测试:0.230秒
> std :: cout test:1.142 s; printf测试:0.216 s
> std :: cout test:1.322 s; printf测试:0.221秒
> std :: cout test:1.108 s; printf测试:0.232秒

正如你所看到的,使用printf,然后刷新比使用std :: cout的时间少约5倍.

虽然我确实期望使用std :: cout的<<操作符可能稍微慢一些(几乎是最小的),我没有准备好这个巨大的差异.我做公平的考试吗如果是这样,那么第一个测试比第二个测试慢得多,如果他们基本上做同样的事情呢?

解决方法

对于一个真正的苹果对苹果比较,重写你的测试,以便测试用例之间唯一改变的是打印功能
int main(int argc,char* argv[])
{
    const char* teststring = "Test output string\n";
    std::clock_t start;
    double duration;

    std::cout << "Starting std::cout test." << std::endl;
    start = std::clock();

    for (int i = 0; i < 1000; i++)
        std::cout << teststring;
    /* Display timing results,code trimmed for brevity */

    for (int i = 0; i < 1000; i++) {
        std::printf(teststring);
        std::fflush(stdout);
    }
    /* Display timing results,code trimmed for brevity */
    return 0;
}

因此,您将只测试printf和cout函数调用之间的差异.您不会因多个<<电话等.如果你尝试这个,我怀疑你会得到不同的结果.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...