Я хочу реализовать интерполяционный поиск на большом массиве. Одна из возможных оптимизаций - коснуться адресов памяти, которые сначала загружены в основную память (прикосновение к ним не вызывает жесткой ошибки страницы). Например, если мне нужно читать данные по индексу X, я могу проверить, находится ли эта страница в основной памяти, если это не так - я могу проверить одну из соседних страниц, которая уже находится в памяти.Проверка состояния страницы памяти программно
Для загрузки этой страницы по адресу (X & 0xFFFFFFFFFFFE0000)
(или нет) мне нужен механизм. Или лучше - мне нужно получить список загруженных страниц в пределах некоторого диапазона адресов или что-то в этом роде.
Возможно ли в коде пользовательского пространства на linux или windows (приложение является crossp-latform)? На данный момент я просто использую LRU-кеш последних затронутых адресов памяти в надежде, что операционная система не поменяет недавно используемые страницы памяти.
QueryWorkingSet или QueryWorkingSetEx не предоставляют эту информацию. – egur
Теоретически рабочий набор находится в физической памяти, проверьте эту страницу: http://msdn.microsoft.com/en-us/library/windows/desktop/cc441804%28v=vs.85%29.aspx –
QueryWorkingSet - это то, что Мне нужно. Знаете ли вы, что такое POSIX-аналог этого API? – Lazin