Оптимальный размер буфера для чтения файла в C

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

Ответ 1

Краткая версия.
Это зависит. В x86 размер буфера 4096 байт - хорошее начало (один размер страницы, а также Расширенный формат).

Более длинная версия.
В UNIX это зависит от ядра, libc, файловой системы, аппаратного обеспечения и т.д. Не только от версий и параметров компиляции, но и от перегонов во время выполнения (например, для чтения вперед).

DIY.
Попробуй это! См. Расширенная программирование в среде UNIX Глава 3.9 "Эффективность ввода-вывода" для простого способа определения наилучшего размера буфера для чтения для одной конкретной системы.

Ответ 2

Сначала: наверняка, кратное размеру логического/физического сектора диска, что вы можете проверить, используя hdparm. Это то же самое

Подсказка: функции libc fopen(3), fread(3), fwrite(3) и т.д. уже выполняют некоторую хорошую буферизацию для вас.

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