Я спрашиваю конкретно о Linux, но ответ, применимый к Unix в целом (т. е. POSIX или подобный), был бы еще лучше, очевидно.
Linux использует свободную память (т. е. память, которая еще не выделена процессам) для кэширования метаданных файловой системы (и, возможно, других вещей). Когда процессы запрашивают дополнительную память, эти кэши сжимаются, чтобы освободить место.
Мой вопрос: есть ли метод, с помощью которого приложение может выделить память, которая служит только как кэш? То есть выделение производится с учетом того, что ядру разрешено каким-то образом захватить контроль над этой областью памяти, когда доступная память заканчивается, а выделения памяти другим процессам в противном случае не могли бы быть обслужены.
решение1
Вы, возможно, могли бы использоватьmadvise(2)
's MADV_FREE
для этого — он отмечает страницы как доступные для восстановления, но не обязательно сразу их удаляет, и данные можно считать обратно. Вы узнаете, что страницы исчезли, если получите все нули обратно (на страницу).