printf more than 5 times faster than std::cout?

后端 未结 6 897
遇见更好的自我
遇见更好的自我 2020-12-09 10:44
#include 
#include 
#include 
#include 

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


        
6条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-09 10:58

    Try this:

    #include 
    #include 
    #include 
    #include 
    
    int main(int argc, char* argv[])
    {
    #if defined(NOSYNC)
        std::cout.sync_with_stdio(false);
    #endif
    
        std::cout << "Starting std::cout test." << std::endl;
    
        std::clock_t start = std::clock();
    
        for (int i = 0; i < 1000; i++)
        {   
            std::cout << "Hello, World! (" << i << ")" << std::endl;
        }   
    
        clock_t mid = std::clock();
    
        for (int i = 0; i < 1000; i++)
        {   
            std::printf("Hello, World! (%i)\n", i); 
            std::fflush(stdout);
        }   
    
        std::clock_t end = std::clock();
    
        std::cout << "Time taken: P1 " << ((mid-start)*1.0/CLOCKS_PER_SEC) << std::endl;
    
        std::cout << "Time taken: P2 " << ((end-mid)*1.0/CLOCKS_PER_SEC) << std::endl;
    
    
        return 0;
    }
    

    Then I get:

    > g++ -O3 t13.cpp
    > ./a.out
    # lots of lines deleted
    Time taken: P1 0.002517
    Time taken: P2 0.001872
    
    > g++ -O3 t13.cpp -DNOSYNC   
    > ./a.out
    # lots of lines deleted
    Time taken: P1 0.002398
    Time taken: P2 0.001878
    

    So the P2 times do not change.
    But you get an improvement of the P1 times (ie std::cout) using std::cout.sync_with_stdio(false);. Becuase the code no longer tries to keep the two stream (std::cout stdout) synchronized. Which if you are writing pure C++ and only using std::cout not a problem.

提交回复
热议问题