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

95
27 сентября 2021, 11:20

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

Answer 1

Не удобства возникнут при запросе у пользователя например имени.

# include <iostream>
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:

На производительность запаздывание вывода на экран никак не влияет. Всё зависит от исполнения консоли в операционной системе.

Answer 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.

Answer 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.

READ ALSO
Что означает данное выражение?

Что означает данное выражение?

Помогите пожалуйста понять данный код

102
перекомпилируйте с параметром -fPIC

перекомпилируйте с параметром -fPIC

Работаю над проектом(состоящий из нескольких подпроектов) Cmake с использование библиотеки wxWidgets, некоторые проекты не могут собраться по причине:

61
При комплиляции программа выдает a=0.00000,b=-9334555

При комплиляции программа выдает a=0.00000,b=-9334555

уважаемые форумчанеПишу программу по заданию(Даны 2 числа

122