Estou perguntando especificamente sobre Linux, mas uma resposta que se aplique ao Unix em geral (ou seja, POSIX ou similar) seria ainda melhor, obviamente.
O Linux usa memória livre (ou seja, aquela memória que ainda não está alocada para processos) para armazenar metadados do sistema de arquivos em cache (e talvez outras coisas). Quando os processos solicitam memória adicional, esses caches são reduzidos para liberar espaço.
Minha pergunta: existe um método pelo qual um aplicativo pode alocar memória que serve apenas como cache? Ou seja, a alocação é feita sabendo que o kernel pode assumir o controle desta área de memória de alguma forma quando a memória disponível estiver baixa e as alocações de memória de outros processos não poderiam ser atendidas.
Responder1
Você talvez pudesse usarmadvise(2)
é MADV_FREE
para isso - ele marca as páginas como disponíveis para recuperação, mas não necessariamente as descarta imediatamente e os dados podem ser lidos novamente. Você saberá que as páginas desapareceram se recuperar todos os zeros (por página).