2009-11-08 6 views
2

Я пишу набор модульных тестов, которые записывают вычисленные значения в файлы. Каждый тест дает квадратную матрицу, которая держится от 50 000 до 500 000 удвоений, и у меня есть в общей сложности 128 комбинаций тестовых случаев.C++ ofstream vs. C++ cout передан в файл

Есть ли существенные накладные расходы, связанные с написанием инструкций cout, а затем их вывод в файлы, или мне лучше писать непосредственно в файл с помощью потока?

ответ

8

Это зависит от вашей системы и среды. Это может быть очень мало различий, но есть только один способ убедиться: попробуйте оба подхода и измерьте их.

1

Поскольку размеры связаны настолько большими, я предполагаю, что эти файлы не предназначены для чтения человеком? Просто убедитесь, что вы пишете их как бинарный, а не читаемый человеком текст, потому что это будет иметь гораздо большее различие, чем разница между использованием потока или конвейера cout.

Означает ли это, что у вас есть, чтобы использовать поток или нет. Я не знаю. Я никогда не писал бинарный файл cout, поэтому не могу сказать, возможно ли это ...

+0

Хммм, еще один ответ, другой анонимный нижний план. Если бы я не знал лучше, я бы сказал, что кто-то с недовольством следил за мной ... – Troubadour

0

Как сказал Чарльз Бейли, это зависит от реализации; то, что следует в основном для реализации linux с gnu toolchain, но я вряд ли представляю, что он отличается от других os.

В libstdC++ 4.4.2:

  • fstream содержат основную stdio_filebuf который является basic_filebuf. Этот basic_filebuf содержит собственный буфер, наследуя basic_streambuf, и фактически содержит файл __basic_file, который содержит базовую простую абстракцию C stdio (FILE * или std :: __ c_file *), в которой он очищает буфер.

  • cout, который представляет собой ostream, инициализируется инициализацией файла stdio_sync_filebuf с помощью stdout абстракции файла C. stdio_sync_filebuf вызывать простые функции C stdio.

Учитывая только C++, окажись, что fstream может быть более эффективным благодаря двум слоям буфера.

Принимая во внимание только C, если процесс разветвляется с файловым дескриптором stdout, перенаправленным в файл, не должно быть разницы между записью в новый открытый файл (что делает fstream в конце) или stdout с точки fd в любом случае (какой cout делает в конце).

Если бы я был вами, я использовал бы fstream, поскольку это ваши намерения.

 Смежные вопросы

  • Нет связанных вопросов^_^