Страницы

Поиск по вопросам

воскресенье, 5 января 2020 г.

Ускорение Сишниго ввода/вывода

#cpp #c


Если в программе используется Сишный ввод/вывод (scanf(), printf()), то рассинхронизация
потоков (std::ios_base::sync_with_stdio(false)) может увеличить производительность?
Или это работает только в обратную сторону?
    


Ответы

Ответ 1



Не удобства возникнут при запросе у пользователя например имени. # include int main() { std::ios_base::sync_with_stdio(false); std::cout<<"Print name:"; char s[100]; scanf("%s",s); printf("s=%s\n",s); } Сначала запрашивает имя, а потом при закрытии программы только выводит запрос ввода. В сишной библиотеке есть свой буфер, пусть он и занимается ускорением. А при отключении синхронизации два буфера (C++ и C) будут работать асинхронно. $ ./a.out Alex s=Alex Print name: На производительность запаздывание вывода на экран никак не влияет. Всё зависит от исполнения консоли в операционной системе.

Ответ 2



Да, это может ускорить ввод/вывод в обе стороны. If the synchronization is turned off, the C++ standard streams are allowed to buffer their I/O independently, which may be considerably faster in some cases. In practical terms, synchronization usually means that a standard iostream object and a standard stdio object share a buffer.

Ответ 3



Cудя по описанию In practice, this means that the synchronized C++ streams are unbuffered, and each I/O operation on a C++ stream is immediately applied to the corresponding C stream's buffer. This makes it possible to freely mix C++ and C I/O. эта настройка влияет только на I/O из С++ - они становятся небуферизируемыми, а сишные потоки никак не затрагиваются. Да это и логично - ведь если никакой iostream не подключать, то сишный ввод-вывод замедляться не должен, а отключать при этом совершенно нечего. Так что, скорее всего, классичесий ввод-вывод не ускорится из-за изменения sync_with_stdio.

Комментариев нет:

Отправить комментарий