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