Существуют ли кроссплатформенные способы продвижения предварительной выборки для чтения большого увеличенного объема памяти mapped_file? - PullRequest
1 голос
/ 16 января 2020

У меня есть приложение C ++ для Windows и Linux (например, Boost 1.53.2 на Amazon Linux), которое использует Boost :: iostream :: mapped_file (т.е. файл с отображением в памяти ). В документации не упоминается "предварительная выборка".

Приложение должно быстро последовательно просматривать большие файлы только для чтения. Иногда эти файлы будут больше, чем доступная память. Таким образом, загрузка всего файла в память может быть невозможным. Но во всех случаях обработка будет продолжаться от начала до конца последовательно.

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

Мне интересно, существуют ли полезные кроссплатформенные способы (Windows и Linux) давать подсказки или указывать или иным образом содействовать автоматической предварительной загрузке страниц, которая потребуется в недалеком будущем. Я ожидаю, что ОС может сделать это в некоторой степени автоматически, но мне интересно, есть ли удобный метод, который я должен использовать для улучшения поведения по умолчанию.

Заранее спасибо!

1 Ответ

1 голос
/ 23 января 2020

Не уверен, насколько портативен, но я включил fadvise и madvise в этот ответ:

Кажется здесь есть несколько хороших указателей для не POSIX windows: Что такое эквивалент fadvise / madvise для windows?

...