A pegada de memória do meu jogo (2D) parece aumentar sempre que carrego uma textura, por exemplo, quando inicio o jogo, ele usa 30 MB de RAM privada, depois de atravessar um arquivo em segundo plano de ~ 367 mb, então está tudo na RAM em algum momento, aumenta 54 MB de RAM privada.
O mesmo acontece depois de percorrer a mesma distância, mas alternando entre dois pontos repetidamente.
No entanto, minhas leituras estão mostrando que o programa está chamando corretamente glDeleteTextures cerca de um segundo depois que as texturas saem da tela; e valgrind não está encontrando vazamentos.
Como sei se devo me preocupar com isso ou se é apenas uma peculiaridade de como o sistema operacional pagina a memória?
Respostas:
A memória virtual é alocada a partir do sistema operacional em grandes blocos, quando mesmo um byte é deixado ainda em uso nesse grande bloco, ele não pode ser liberado de volta para o sistema operacional.
As bibliotecas de alocação no espaço do usuário também mantêm uma certa quantia para reutilização, para evitar repetidamente exigir e liberar memória de / para o SO, o que é extremamente lento.
Por exemplo, você aloca uma textura, o driver OpenGL reserva uma tabela de 32 slots de textura, você continua alocando texturas, o driver precisa alocar uma tabela maior de 1024 slots de textura. Essa nova tabela agora está ocupando espaço no grande espaço da RAM. libere todas as texturas, o driver não está encolhendo nem realocando a tabela na expectativa de que seu jogo / aplicativo precise usar tantas texturas posteriormente, para que grande parte da RAM não possa ser liberada de volta ao sistema operacional.
Isso é perfeitamente normal e desejado. A RAM não utilizada será reutilizada eventualmente pelo seu aplicativo.
fonte