mmap () против блоков чтения



Я работаю над программой, которая будет обрабатывать файлы, которые потенциально могут быть размером 100 ГБ или более. Файлы содержат наборы записей переменной длины. У меня есть первая реализация, и теперь я смотрю на повышение производительности, особенно на более эффективное выполнение ввода-вывода, так как входной файл сканируется много раз.



есть ли эмпирическое правило для использования mmap() против чтения в блоках через C++ ' S fstream библиотеки? То, что я хотел бы сделать, это прочитать большие блоки с диска в буфер, обрабатывать полные записи из буфера, а затем читать дальше.



The mmap() код потенциально может стать очень грязным, так как mmap'D блоки должны лежать на границах размера страницы (мое понимание) и записи могут потенциально понравиться через границы страницы. С fstreams, Я могу просто искать начало записи и начать читать снова, так как мы не ограничиваемся чтением блоков, которые лежат на границах размера страницы.



как я могу решите между этими двумя вариантами, не написав сначала полную реализацию? Любые эмпирические правила (например,mmap() 2x быстрее) или простые тесты?

675   0  

Comments

    Ничего не найдено.