WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Что быстрее работает: printf или cout?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Что быстрее работает: printf или cout?
AdminDimon опубликован 16-02-2002 18:57 MSK   Click Here to See the Profile for AdminDimon   Click Here to Email AdminDimon  
Привет! Пишу консольку шлюза для сообщений от клиентов. По каждому принятому/переданному сообщению отображаю в консоль при помощи printf соответствующее сообщение. При большом трафике начинает жрать CPU и memory. Сделал следующее:
a) предусмотрел входной параметр для отключения трейсов;
b) предусмотрел входной параметр для перенаправления выдачи в файл - проверено, жрет ресурсов значительно меньше.
Вопросы:
1) Может cout жрет меньше ресурсов?
2) Как после того, как я перенаправил выдачу в файл, перенаправить ее обратно на экран?
Заранее спасибо за ответ.
Muran опубликован 16-02-2002 20:52 MSK     Click Here to See the Profile for Muran  Click Here to Email Muran     
Попробуй на прямую копировать в буфер экрана.
Это вроде побыстрее.
Но printf круче cout, хота и не удобен.
Kosha опубликован 18-02-2002 00:26 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Кто круче? Принтф? В смысле быстрее? Ну вы блин даете...
Flex Ferrum опубликован 18-02-2002 02:50 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Проблема не в printf/cout, а в том, что при выводе на консоль больших объемов информации NT жутко тормозит - сам кучу раз сталкивался.

muran: printf не круче cout. В cout реализовано тоже самое, но другими методами.

Strelok опубликован 18-02-2002 06:42 MSK     Click Here to See the Profile for Strelok  Click Here to Email Strelok     
printf работает намного лучше в циклах, так как сразу же выводит данные на экран. В cout же данные буферизируются и выводятся большими "порциями".
Если ты используешь цикл, и тебе надо выводить в нем данные, используй printf. Если будешь использовать cout, у тебя будут большие задержки с выводом информации - проверено.
Лично я использую в любом случай printf, но это дело привычки.

Удачи!

the_moon опубликован 18-02-2002 08:35 MSK     Click Here to See the Profile for the_moon  Click Here to Email the_moon     
printf тоже буферизирует вывод данных, так что без разницы. А тормоза связвны с особенностями вывода на экран. И это везде на любом компьютере так, из за видео системы-непосредственное копирование в активную страницу занимает очень много времени. Так что всегда было если скорость программы критична, то вывод трассировки лучше направить в файл или в /dev/null.
ADK опубликован 18-02-2002 00:11 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Реализация printf из-за передачи в стек переменного числа параметров более медленная, но тормоза возникают не из-за этого...
AdminDimon опубликован 18-02-2002 19:41 MSK     Click Here to See the Profile for AdminDimon  Click Here to Email AdminDimon     
Привет! Большое спасибо всем! С большим интересом прочитал. Слышал звон, что printf работает с буферизацией данных а cout - без оной.Дело в том, что при выводе в файл printf похоже пишет в буфер и при некорректном выходе из програмы файл остается пустой. Приходится использовать формат cout << "отображаемая информация " << переменная << "\n" << flush; В этом случае при любом выходе из программы получаю заполненный файл. Но работает все это медленнее. Поэтому и возникла делема. Спасибо за ответы!
Flex Ferrum опубликован 18-02-2002 20:30 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
AdminDimon: Рекомендую тебе вместо

<< "\n" << flush;

написать

<< endl;

Манипулятор endl посылает в поток возврат коретки и делает flush. Вернувшись к буферизации можно отметить следующее: буферизируют и cout и printf, причем примерно один и тот-же объем данных :)) И буферизируют до тех пор, пока не встретится символ возврата каретки (для printf) или манипулятора endl (для cout) - после этого буферы сбрасываются.

the_moon опубликован 19-02-2002 13:41 MSK     Click Here to See the Profile for the_moon  Click Here to Email the_moon     
открыть логфайл с самого начала, "глобально", обернуть все последующие вызовы в try - catch по catchу закрыть файл
m опубликован 24-02-2002 07:24 MSK     Click Here to See the Profile for m  Click Here to Email m     
напиши свою функцию вывода и используй в ней
puts(); или
putchar(); если нужно перенаправлять вывод или putch(); только на консоль (по быстрее будет).
на порядок быстрее чем cout и printf!

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.