Какой размер буфера выбрать для чтения / записи файлов с помощью функций POSIX fread / fwrite?
grep, cp)
read/ writeфункции или ANSI / ISO / IEC fread/ fwriteфункции?
Какой размер буфера выбрать для чтения / записи файлов с помощью функций POSIX fread / fwrite?
grep, cp)
read/ writeфункции или ANSI / ISO / IEC fread/ fwriteфункции?
Ответы:
Функции ANSI / ISO fread/fwriteбуферизируются. Размер буфера обычно составляет 8 КиБ, и это дает степень детализации независимо от того, что вы используете в своем коде. Возможно, имеет смысл немного увеличить буфер, возможно, до значения ниже. Для массовой передачи они всегда будут немного медленнее, хотя из-за дополнительных копий.
Для read/writeфункций POSIX это зависит от операционной системы и устройства, а также от многих других вещей, но практический опыт показывает, что вы не получите никакого улучшения производительности за счет увеличения буфера выше десятков КиБ, поэтому 32 или 64 КиБ - это то, что нужно.
В некоторых системах зависимость больше, чем в других. В Linux разница обычно минимальна выше 8 КиБ (поэтому буфер по умолчанию подходит), например, в Windows CE (с использованием собственного API; у них нет POSIX), даже больше, чем 64 КиБ, все еще помогают. Это также может зависеть от устройства.
fread, fwrite) и 32 / 64К для небуферизован? Если при отправке данных изображения есть какое-либо конкретное обоснование, чтобы выбрать буферизованный или небуферизованный?