Перейти к содержанию
    

Самодельная буферизация файлового вывода - есть ли смысл?

Программа формирует на диске бинарный файл достаточно большого размера (десятки мегабайт). Содержимое этого байта формируется из 32-битных значений.

Предыдущий программист реализовал самодельную буферизацию вывода: записываемые данные сначала заносятся в промежуточный буфер (127 КБайт), а при его заполнении вызывается функция write().

Не могу понять - чем этот подход лучше по сравнению с использованием fwrite(), которая, по факту, делает то же самое?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 minutes ago, new123 said:

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

С таким же (вроде как) успехом можно просто задать необходимый буфер для fwrite() - setvbuf().

Поэтому и возник вопрос - это хитрость или глупость? :)

Изменено пользователем Harvester

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, Harvester said:

Предыдущий программист реализовал самодельную буферизацию вывода: записываемые данные сначала заносятся в промежуточный буфер (127 КБайт), а при его заполнении вызывается функция write().

Не могу понять - чем этот подход лучше по сравнению с использованием fwrite(), которая, по факту, делает то же самое?

Ну как бы *p++=v явно быстрее, чем fwrite(&v,sizeof(v),1,f)

Я, понятное дело, про накладные расходы и прочее, если одно и другое вызвать 32768 раза (чтобы получить 128К данных)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно есть. Программа пишет лог сильно быстрее, чем лог пишется на диск. Поэтому однозначно нужно разносить эти функции.
Вот крутой логгер: https://github.com/gabime/spdlog 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...