Я работаю над программой, которая будет обрабатывать файлы, размер которых потенциально может составлять 100 ГБ или более. Файлы содержат наборы записей переменной длины. У меня есть первая реализация и работает, и теперь я смотрю на улучшение производительности, особенно при эффективном выполнении ввода/вывода, поскольку файл ввода сканируется много раз.
Есть ли правило для использования mmap()
по сравнению с чтением в блоках через библиотеку С++ fstream
? То, что я хотел бы сделать, это прочитать большие блоки с диска в буфер, обработать полные записи из буфера, а затем прочитать больше.
Код mmap()
может стать очень запутанным, поскольку блоки mmap
'd должны лежать на границах размера страницы (мое понимание), и записи могут потенциально понравиться на границах страниц. С fstream
s я могу просто попытаться начать запись и начать читать снова, так как мы не ограничены чтением блоков, которые лежат на границах размера страницы.
Как я могу выбрать между этими двумя параметрами, не записав сначала полную реализацию? Любые эмпирические правила (например, mmap()
в 2 раза быстрее) или простые тесты?