Я хочу сохранить виртуальное адресное пространство, зарезервированное в моем процессе для памяти, которая ранее использовалась, но в настоящее время не нужна. Меня интересует ситуация, когда ядром хоста является Linux и оно настроено на предотвращение чрезмерной фиксации (что происходит путем подробного учета всей выделенной памяти).
Если я просто хочу предотвратить данные, которые мое приложение больше не использует от занятия физической памяти или переключения на диск (в любом случае тратя ресурсы), Я могу изменить
ядро, что оно не нужно, или mmap
новые нулевые страницы поверх него. Но ни один из этих подходов не обязательно уменьшит объем памяти, который считается зафиксированным, и другие процессы не могут использовать его.
Что, если я заменю страницы новыми нулевыми страницами, которые помечены только для чтения? Мое намерение состоит в том, чтобы они не засчитывались в выделенную память, и, кроме того, я могу позже использовать mprotect
, чтобы сделать их доступными для записи, и что это не удастся, если сделать их доступными для записи превысит лимит выделенной памяти. Я правильно понимаю? Будет ли это работать?