Apenas falando de maneira geral e simplista, e sem considerar os detalhes das implementações de memória virtual, o desenvolvedor sempre tem conhecimento antecipado de que a implementação da VM não possui.
O desenvolvedor sempre pode dizer: "Não preciso carregar esse arquivo de áudio no momento. A música dentro é usada apenas para o game over screen". E imediatamente após o game over screen, o desenvolvedor pode dizer: "Não preciso mais deste clipe de áudio na memória física. Ele é usado apenas para esse game over screen".
O sistema operacional não tem essa previsão. Talvez seja possível descobrir, muitas falhas de página posteriormente, que alguns clipes de áudio não são mais necessários na memória física, pois não são acessados há um bom tempo. Mas transformar a previsão em retrospectiva se traduz em muitas falhas de página, e muitas falhas de página se traduzem em soluços nas taxas de quadros em um software tão crítico quanto o tempo em um videogame. Lá, a visão do desenvolvedor realmente ajuda se você deseja evitar esses soluços.
E isso se aplica conceitualmente, independentemente do hardware e software. Supondo que a paginação na memória seja cara, a previsão do desenvolvedor sempre ajudará a reduzir essa despesa.
Falando de maneira ainda mais ampla, há um ciclo interminável entre designer de hardware, designer de compilador, designer de SO / driver e desenvolvedor de aplicativos. Os desenvolvedores de hardware / compilador / SO / driver geralmente tentam implementar otimizações para acelerar seu aplicativo médio com base em seus padrões usuais de acesso à memória e, talvez, às vezes com a esperança de: "As pessoas devem ser capazes de escrever o código da maneira que quiserem e deve ser rápido ".Mas, se havia algum pensamento desse tipo, geralmente falha em campos críticos para o desempenho, porque os desenvolvedores críticos começam a aprender os detalhes complexos de seu compilador, hardware, sistema operacional, drivers, etc. e começam a escrever o código especificamente projetado para explorar o máximo possível a gravação do código mais rápido possível (como pré-buscas, divisão de campos quentes / frios, SoAs etc. para códigos compatíveis com o cache). E isso é como um jogo que nunca acaba. Essas coisas nunca são tratadas como caixas pretas em campos críticos de desempenho, pois os desenvolvedores estão competindo por desempenho.
Pessoalmente, eu meio que gostaria que a memória virtual não existisse, uma vez que adiciona uma camada adicional de imprevisibilidade de desempenho de maneiras que tendem a ser muito extremas e incorrem, muito mais uma penalidade de desempenho quando as coisas vão realmente para o sul a ponto de serem inutilizadas. Às vezes, encontro casos em que usei algum aplicativo em que digitei um ou dois dígitos extras acidentalmente quando bêbado em algum campo de entrada, o que causou o esgotamento da memória física tão rapidamente, de maneira a levar o sistema operacional a um rastreamento onde eu não conseguia ' nem clique mais no botão Cancelar na barra de progresso e tive que esperar 10 minutos enquanto pressionava Ctrl + Alt + Del para interromper um processo e xingar a mim mesmo enquanto derramava minha bebida para voltar a um ponto em que as coisas são utilizáveis novamente e que apesar do arquivo de paginação ser armazenado em um SSD. Nesses casos, eu preferiria um erro de "falta de memória" ou algo assim; nesse ponto, talvez eu feche algumas das minhas 17 guias pornô (tudo bem, eu marquei meus favoritos de qualquer maneira) para liberar alguma memória e, em seguida, começar imediatamente retomando meus negócios.