jeudi 3 août 2017

Does ios_base::sync_with_stdio(false) affect

It is well known that ios_base::sync_with_stdio(false) will help the performance of cin and cout in <iostream> by preventing sync b/w C and C++ I/O. However, I am curious as to whether it makes any difference at all in <fstream>.

I ran some tests with GNU C++11 and the following code (with and without the ios_base::sync_with_stdio(false) snippet):

#include <fstream>
#include <iostream>
#include <chrono>
using namespace std;

ofstream out("out.txt");

int main() {
    auto start = chrono::high_resolution_clock::now();
    long long val = 2;
    long long x=1<<22;
    ios_base::sync_with_stdio(false);
    while (x--) {
        val += x%666;
        out << val << "\n";
    }
    auto end = chrono::high_resolution_clock::now();
    chrono::duration<double> diff = end-start;
    cout<<diff.count()<<" seconds\n";
  return 0;
}

The results are as follows:

With sync_with_stdio(false): 0.677863 seconds (average 3 trials)
Without sync_with_stdio(false): 0.653789 seconds (average 3 trials)

Is this to be expected? Is there a reason for a nearly identical, if not slower speed, with sync_with_stdio(false)?

Thank you for your help.

Aucun commentaire:

Enregistrer un commentaire