Estou perguntando especificamente sobre o Linux, mas uma resposta que se aplica 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 em cache os metadados do sistema de arquivos (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 tem permissão para assumir o controle dessa á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 puderem ser atendidas.
Talvez você possa usar
madvise(2)
'sMADV_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 de volta. Você saberá que as páginas sumiram se recuperar todos os zeros (por página).