Se tudo correr bem, o seu kernel deve decidir "fazer a coisa certa" por si só. Ele usa muitas heurísticas sofisticadas para decidir o que trocar e o que manter quando há pressão de memória. Essas heurísticas foram cuidadosamente construídas por pessoas realmente inteligentes, com muita experiência em gerenciamento de memória, e já são boas o suficiente para serem bem difíceis de melhorar.
O kernel usa uma combinação de coisas como essa para decidir o que trocar:
- Como recentemente a memória foi usada.
- Se a memória foi modificada desde que foi mapeada. Assim, por exemplo, uma biblioteca compartilhada será enviada à frente da memória heap, porque a memória heap está suja e precisa ser gravada para troca, enquanto a memória mapeada da biblioteca compartilhada pode ser carregada novamente a partir do arquivo original no disco caso seja necessário novamente , então não há necessidade de escrever essas páginas para trocar. Aqui você deve perceber que
tmpfs
memory está sempre suja (a menos que seja uma página nova cheia de zeros) porque não é apoiada por nada. - Sugestões de
mprotect()
. - Provavelmente muito mais.
Resposta curta: não, você não pode substituir diretamente as decisões do kernel sobre como gerenciar a memória.