Оптимальный размер буфера для fread / fwrite [закрыто]


10

Какой размер буфера выбрать для чтения / записи файлов с помощью функций POSIX fread / fwrite?

c 

Этот вопрос слишком локализован. Это относится только к конкретной программе, которую вы кодируете в данный момент.
Мировой инженер

Я имею в виду общий случай. Многим программам необходимо читать / записывать целые файлы с очень неизвестным размером (например grep, cp)

Вы имеете в виду POSIX read/ writeфункции или ANSI / ISO / IEC fread/ fwriteфункции?
Ян Худек

Ответы:


6

Функции ANSI / ISO fread/fwriteбуферизируются. Размер буфера обычно составляет 8 КиБ, и это дает степень детализации независимо от того, что вы используете в своем коде. Возможно, имеет смысл немного увеличить буфер, возможно, до значения ниже. Для массовой передачи они всегда будут немного медленнее, хотя из-за дополнительных копий.

Для read/writeфункций POSIX это зависит от операционной системы и устройства, а также от многих других вещей, но практический опыт показывает, что вы не получите никакого улучшения производительности за счет увеличения буфера выше десятков КиБ, поэтому 32 или 64 КиБ - это то, что нужно.

В некоторых системах зависимость больше, чем в других. В Linux разница обычно минимальна выше 8 КиБ (поэтому буфер по умолчанию подходит), например, в Windows CE (с использованием собственного API; у них нет POSIX), даже больше, чем 64 КиБ, все еще помогают. Это также может зависеть от устройства.


так 8k для забуференном ввода / вывода (то есть fread, fwrite) и 32 / 64К для небуферизован? Если при отправке данных изображения есть какое-либо конкретное обоснование, чтобы выбрать буферизованный или небуферизованный?
Франческо Бой

1
@FrancescoBoi, 8k по умолчанию только для буферизованных, которые вы можете изменить. Точка буферизации состоит в том, чтобы избежать всех переключений контекста, когда вы обрабатываете несколько байтов за раз. Для изображения, которое вам обычно нужно или у вас есть все, а затем небуферизованное лучше, так как оно немного пропускает обработку.
Ян Худек
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.