Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2011, 01:09   #1
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию Функции вывода

Здравствуйте, уважаемые господа.

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

Разумеется, std::cout в этом случае, я думаю, лучше не использовать.

Проверил скорость выполнения printf ("%c", ch) и putchar (ch) — оказалось, что первый способ работает быстрее. Почему? Ведь putchar не должен разбирать формат строки.

Вместо printf для константных строк, я думаю, лучше будет использовать puts, да?

Что ещё можно использовать в данном случае?

Действительно ли write работает быстрее или нет всё же?

Заранее благодарю за возможные ответы.
YourLastSong вне форума Ответить с цитированием
Старый 17.07.2011, 01:44   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Ну мне кто-то говорил, что в С++ быстрее iostream, т.е. std::cout, т.к. специально для плюсов написана и оптимизирована. А putchar() возможно работает медленнее потому что он каждый раз обращается к потоку вывода. Но это лишь предположение)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 17.07.2011, 01:47   #3
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Нет, std::cout точно работает медленнее, это даже просто так видно, если выводить любую строку в цикле.
YourLastSong вне форума Ответить с цитированием
Старый 17.07.2011, 01:58   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Ну у меня std::cout и printf работают практически с одной скоростью.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 17.07.2011, 02:01   #5
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Как вообще лучше измерить скорость работы той или иной функции? Я при этом использую GetTickCount просто.
YourLastSong вне форума Ответить с цитированием
Старый 17.07.2011, 02:11   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Сдается мне, что должно сводится к чему-то такому:
Код:
HANDLE hfile = CreateFile("CONOUT$", GENERIC_WRITE,  FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
char* buf = "qwerty";
WriteFile(hfile, buf, strlen(buf), 0, 0);
Потести WriteFile.
EUGY вне форума Ответить с цитированием
Старый 17.07.2011, 02:13   #7
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Так ведь запись в файл. Или там присутствует возможность передать в качестве параметра вывод на экран консоли?
YourLastSong вне форума Ответить с цитированием
Старый 17.07.2011, 02:13   #8
TDrive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 95
По умолчанию

а что за программа? если есть возможность написать её под дос то можно попробовать напрямую обращаться к видеопамяти по адресу (не помню точно вроде 0xB8000000).
на ассемблере таким баловался, в теории должно быть быстрее. но там возможно придётся разобраться в графических режимах.
а ещё от версии винды может зависеть, политика майкрософта против "лишних" возможностей программиста, они это защитой от вирусов называют)

другой вариант это протестировать все возможные функции вывода и выбрать самую быструю.

ещё есть такая вещь как системный буфер. некоторые функции сначала набирают символы в буфер а потом выводят на экран сразу всю строчку из буфера. тоже на скорость влияет причём в разных ситуациях по разному.

ещё могу сказать что когда программировал на перле заметил что вывод текста в винде на несколько порядков медленнее чем в линуксе. если программу пишеш для себя попробуй перейти на линукс.
TDrive вне форума Ответить с цитированием
Старый 17.07.2011, 02:17   #9
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Цитата:
Сообщение от TDrive Посмотреть сообщение
а что за программа? если есть возможность написать её под дос то можно попробовать напрямую обращаться к видеопамяти по адресу
Нет, надо именно под вин.

Цитата:
другой вариант это протестировать все возможные функции вывода и выбрать самую быструю
Так вот в чём проблема - никак не могу понять, чем лучше измерить время в данном случае, кроме GetTickCount?

Цитата:
ещё есть такая вещь как системный буфер. некоторые функции сначала набирают символы в буфер а потом выводят на экран сразу всю строчку из буфера. тоже на скорость влияет причём в разных ситуациях по разному
Как это узнать? Можно поподробнее?
YourLastSong вне форума Ответить с цитированием
Старый 17.07.2011, 02:17   #10
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Сообщение от YourLastSong Посмотреть сообщение
Так ведь запись в файл. Или там присутствует возможность передать в качестве параметра вывод на экран консоли?
вывод в консоль: CONOUT$
EUGY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват вывода Яр|/||< (^_^) Win Api 5 02.02.2011 23:08
спецификатор формата вывода функции printf Айат Помощь студентам 3 21.02.2010 13:12
Ошибка в функции вывода новостей smn1 PHP 2 07.09.2009 08:09
ограничение вывода Interfere Общие вопросы C/C++ 2 07.05.2009 21:00
Вид вывода в С++ Rembo Общие вопросы C/C++ 4 04.01.2008 20:40