Мне нужно прочитать большие файлы в C с помощью функции read
. Мне просто интересно, не имеет значения, какой размер буфера мы сохраняем с точки зрения производительности. Размеры файлов могут достигать десятков ГБ.
Оптимальный размер буфера для чтения файла в C
Ответ 1
Краткая версия.
Это зависит. В x86 размер буфера 4096 байт - хорошее начало (один размер страницы, а также Расширенный формат).
Более длинная версия.
В UNIX это зависит от ядра, libc, файловой системы, аппаратного обеспечения и т.д. Не только от версий и параметров компиляции, но и от перегонов во время выполнения (например, для чтения вперед).
DIY.
Попробуй это! См. Расширенная программирование в среде UNIX Глава 3.9 "Эффективность ввода-вывода" для простого способа определения наилучшего размера буфера для чтения для одной конкретной системы.
Ответ 2
Сначала: наверняка, кратное размеру логического/физического сектора диска, что вы можете проверить, используя hdparm. Это то же самое
Подсказка: функции libc fopen(3)
, fread(3)
, fwrite(3)
и т.д. уже выполняют некоторую хорошую буферизацию для вас.
Еще одна подсказка: если вам не нужно передавать весь файл, но для случайного доступа к его частям вы можете попробовать mmap()
включить его.