Учитываются ли нулевые страницы mmap / mprotect-readonly в выделенную память?

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

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

Что, если я заменю страницы новыми нулевыми страницами, которые помечены только для чтения? Мое намерение состоит в том, чтобы они не засчитывались в выделенную память, и, кроме того, я могу позже использовать mprotect , чтобы сделать их доступными для записи, и что это не удастся, если сделать их доступными для записи превысит лимит выделенной памяти. Я правильно понимаю? Будет ли это работать?

8
задан Bhargav Rao 11 February 2019 в 02:45
поделиться