Как обрабатывать (в режиме только для чтения) большой двоичный файл в C/C++
по адресу Linux
как можно быстрее? Через read
или mmap
? Какой размер буфера? (Нет повышения или ничего.)Чтение больших файлов последовательно
ответ
mmap быстрее и оптимален для приложений только для чтения. Смотрите ответ здесь:
Этот ответ в основном точнее, но бит о том, что «mmap позволяет всем этим процессам совместно использовать одни и те же страницы физической памяти, экономя много памяти», является блоком - кэш файловой системы делает это. –
Вы можете использовать madvise с mmap, и вы могли бы также назвать readahead (возможно, в отдельном потоке, так как блокирующий системный вызов).
Если прочитать файл с помощью обычного read(2), рассмотреть возможность использования posix_fadvise(2) и передать буферы 32kbytes в 1Mbytes к read(2) ...
Вызов mmap
на достаточно больших регионов; по крайней мере, несколько десятков мегабайт (при условии, что у вас более 1 ГБ ОЗУ), и если у вас много доступной ОЗУ, в больших регионах (до 80% доступной ОЗУ).
Позаботьтесь о границах ресурсов, например. set with setrlimit
Для не слишком больших файлов (и не слишком много из них) вы могли бы полностью их обмануть mmap
. Вам нужно позвонить, например. stat, чтобы получить их размер. Как правило, при чтении одного (не нескольких) больших файлов на моем настольном компьютере я бы mmap
его полностью, если он меньше, чем 3Gb.
Если производительность важна, уделите время времени для оценки вашего приложения и вашей системы и соответствующим образом настройте его. Конфигурирование параметров (например, размер области mmap-региона) имеет смысл.
/proc/
файловой системы, в частности, внутри /proc/self/
из приложения, дает ряд мер (например, /proc/self/status
, /proc/self/maps
, /proc/self/smaps
, /proc/self/statm
и т.д.)
GNU Libc следует использовать mmap
для чтения FILE
с, что у вас есть fopen
-ed с "rm"
режим.
- 1. Ada - чтение больших файлов
- 2. Чтение больших файлов
- 3. Чтение файлов последовательно в порядке
- 4. Чтение больших файлов в байтах
- 5. Python Чтение больших текстовых файлов
- 6. Matlab-чтение больших файлов netcdf
- 7. Чтение больших файлов в C++
- 8. Чтение больших текстовых файлов эффективно
- 9. Чтение/запись больших файлов VB.NET
- 10. Чтение больших файлов в цикле
- 11. Чтение и разбор больших файлов
- 12. PHP Чтение больших текстовых файлов
- 13. C++ чтение/запись больших файлов
- 14. Чтение очень больших файлов в PHP
- 15. Чтение и сопоставление содержимого двух больших файлов
- 16. Чтение больших текстовых файлов в MATLAB
- 17. Чтение/запись больших файлов XML в C#
- 18. Чтение больших двоичных файлов в C++ (Windows)
- 19. Чтение больших текстовых файлов в datagridview фильтрация
- 20. Чтение очень больших файлов CSV и JSON
- 21. многопоточное чтение и обработка больших текстовых файлов
- 22. Чтение больших файлов с использованием SQLalchemy
- 23. чтение больших файлов быстро в визуальном базовом
- 24. ServiceStack.Redis чтение больших файлов с сервера Redis
- 25. ColdFusion 8 Чтение больших файлов Excel
- 26. Android-чтение больших файлов (исключение из памяти)
- 27. Чтение больших файлов XML с помощью C#
- 28. C++ чтение больших файлов по частям
- 29. Java: чтение больших файлов excel для обработки
- 30. Чтение больших объемов файлов с помощью C
Последовательный или произвольный доступ? – thiton