La huella de memoria de mi juego (2D) parece aumentar cada vez que cargo una textura, por ejemplo, cuando inicio mi juego usa 30 mb de RAM privada, después de atravesar un archivo de fondo de ~ 367 mb, por lo que todo está en RAM en algún momento, aumenta a 54 mb de RAM privada.
Lo mismo sucede después de recorrer la misma distancia pero yendo y viniendo entre dos puntos repetidamente.
Sin embargo, mis lecturas muestran que el programa está llamando correctamente a glDeleteTextures aproximadamente un segundo después de que las texturas desaparecen de la pantalla; y valgrind no encuentra ninguna fuga.
¿Cómo sé si debería preocuparme por esto, o si es solo una peculiaridad de cómo funciona la memoria del sistema operativo?
Respuestas:
La memoria virtual se asigna desde el sistema operativo en grandes fragmentos, cuando incluso un byte se deja en uso en ese gran fragmento, no se puede volver a liberar en el sistema operativo.
Las bibliotecas de asignación en el espacio del usuario también mantienen una cierta cantidad de reutilización para evitar exigir y liberar repetidamente memoria desde / hacia el sistema operativo, que es extremadamente lenta.
Por ejemplo, asigna una textura, el controlador OpenGL reserva una tabla de 32 ranuras de textura, sigue asignando texturas, el controlador necesita asignar una tabla más grande de 1024 ranuras de textura, esta nueva tabla ahora está ocupando espacio en la gran porción de RAM, usted libera todas las texturas, el controlador no se está reduciendo ni reasignando esa tabla con la expectativa de que su juego / aplicación necesitará usar tantas texturas más tarde para que no se pueda liberar una gran cantidad de RAM en el sistema operativo.
Esto es perfectamente normal y deseado. La RAM no utilizada será reutilizada eventualmente por su aplicación.
fuente