Harvester 0 5 октября, 2020 Опубликовано 5 октября, 2020 · Жалоба Программа формирует на диске бинарный файл достаточно большого размера (десятки мегабайт). Содержимое этого байта формируется из 32-битных значений. Предыдущий программист реализовал самодельную буферизацию вывода: записываемые данные сначала заносятся в промежуточный буфер (127 КБайт), а при его заполнении вызывается функция write(). Не могу понять - чем этот подход лучше по сравнению с использованием fwrite(), которая, по факту, делает то же самое? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 5 октября, 2020 Опубликовано 5 октября, 2020 · Жалоба Может не хотел диск убивать частыми записями. Линукс по дефолту, насколько помню, скидывает из буфера в файл блоками по 4к, но могу с цифрой ошибиться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harvester 0 5 октября, 2020 Опубликовано 5 октября, 2020 (изменено) · Жалоба 28 minutes ago, new123 said: Может не хотел диск убивать частыми записями. Линукс по дефолту, насколько помню, скидывает из буфера в файл блоками по 4к, но могу с цифрой ошибиться С таким же (вроде как) успехом можно просто задать необходимый буфер для fwrite() - setvbuf(). Поэтому и возник вопрос - это хитрость или глупость? :) Изменено 5 октября, 2020 пользователем Harvester Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 5 октября, 2020 Опубликовано 5 октября, 2020 · Жалоба 1 hour ago, Harvester said: setvbuf(). вот я не знал и он наверное тоже =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 5 октября, 2020 Опубликовано 5 октября, 2020 · Жалоба 9 hours ago, Harvester said: Предыдущий программист реализовал самодельную буферизацию вывода: записываемые данные сначала заносятся в промежуточный буфер (127 КБайт), а при его заполнении вызывается функция write(). Не могу понять - чем этот подход лучше по сравнению с использованием fwrite(), которая, по факту, делает то же самое? Ну как бы *p++=v явно быстрее, чем fwrite(&v,sizeof(v),1,f) Я, понятное дело, про накладные расходы и прочее, если одно и другое вызвать 32768 раза (чтобы получить 128К данных) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dontsov 0 5 октября, 2020 Опубликовано 5 октября, 2020 · Жалоба Конечно есть. Программа пишет лог сильно быстрее, чем лог пишется на диск. Поэтому однозначно нужно разносить эти функции. Вот крутой логгер: https://github.com/gabime/spdlog Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться