Почему ostringstream быстрее, чем ofstream

Для записи большого количества данных в файл у меня есть 2 подхода:

  1. Запись напрямую в ofstream

     ofstream file ("c: \\ test.txt");
    для (int i = 0; i <10000; ++ i)
    {
     файл << данные [я];
    }
    
  2. Сначала записать в istringstream, а затем сразу записать в ofstream

     ostringstream strstream;
    для (int i = 0; i <10000; ++ i)
    {
     strstream << данные [я];
    }
    ofstream файл ("c: \\ test.txt");
    файл << strstream.str ();
    

Неудивительно, что второй подход быстрее, фактически в 4 раза быстрее, чем первый подход на моей машине HP7800.

Но почему? Я знаю, что ofstream использует внутри filebuf, а ostringstream использует stringbuf - в качестве буфера они все должны находиться в памяти, поэтому не должны иметь никакого значения.

В чем разница внутри?

10
задан sbi 4 March 2011 в 10:21
поделиться