¿Por qué se pierde la memoria en un programa?
Tenga en cuenta: este es un tratamiento muy simplificado del tema y está escrito para transmitir los conceptos generales y no todas las respuestas posibles.
Las pérdidas de memoria son causadas por una mala programación. La memoria en una computadora es un recurso finito. Todo programa útil necesita memoria para contener los valores que cambian (se denominan variables, porque su valor puede variar con el tiempo) a lo largo de la “vida útil” en la que se ejecuta. Casi todo sobre un programa de computadora consume algo de memoria. Cosas como la cantidad de notificaciones de mensajes que tiene (hablando de Quora), qué texto mostrar en la parte superior de la página web, listas de artículos, y así sucesivamente. Ahora, algún programador tiene que decirle a la computadora el tipo de variable de cada cosa, podría haber miles o más variables.
- ¿Cuáles son las ventajas de desarrollar con la pila MEAN (mongoDB, Express.js, Angular.js, Node.js)?
- ¿Qué significa probar beta un software?
- ¿Cuál es el mejor código fuente abierto para construir marketplace?
- ¿Existe un software de animación gratuito que pueda usar para hacer videos en 2D como Cómo debería haber terminado y Cianuro y felicidad? También debe ser fácil de usar 2
- ¿Qué aplicación utiliza para programar estrategias comerciales automatizadas?
- El programador le pide a la computadora que reserve algo de espacio para su variable. Si hay memoria disponible, la computadora le devolverá al programador una referencia a la memoria.
- A veces no hay suficiente memoria y si el programador no presta atención a este hecho, su programa puede fallar al intentar acceder a la memoria que no ha sido asignada. En Windows, esto generalmente causa una falla de segmentación.
- El programador puede usar esta variable durante el tiempo que lo necesite o hasta que se limpie automáticamente al salir de una función (este es otro tema largo “, en la programación de qué es una función, qué es un procedimiento, qué es una clase , qué es una unidad de compilación, etc. ”
- A veces es imposible que la computadora sepa cuándo algo debería poder eliminarse de la memoria. Digamos que tiene “Cosa A” y se refiere a “Cosa B” que a cambio se refiere a “Cosa A”. La computadora ha determinado que debería ser capaz de eliminar “Thing A” de la memoria, por lo que verifica si hay algo más que se refiera a “Thing A” y ve que “Thing B” lo hace, por lo que decide “¡Vaya! No puedo eliminar “Cosa A” todavía. Esto se vuelve mucho más difícil cuando hay una larga cadena de “Cosas”
- Luego, una vez que el programador haya terminado con la variable, debe pedirle a la computadora que recupere la memoria.
- La mayoría de los programadores, después de varios años, se vuelven meticulosos al tratar de asegurarse de que devuelvan la memoria. Pero esta disciplina a menudo solo viene después de ser quemada varias veces. Algunos programadores siguen siendo descuidados.
¿Eso sucede más en dispositivos más antiguos?
Hay varias cosas que podrían hacer que esto parezca ser así, incluso si pudiera ser una observación defectuosa.
- Los dispositivos más antiguos generalmente tienen menos memoria y, por lo tanto, mostrarían pérdidas de memoria más rápido que un dispositivo con más memoria (RAM no SSD o HD).
- Los dispositivos más antiguos tienen versiones anteriores de su sistema operativo, que en realidad es solo un programa muy complicado. Todos los programas tienen errores (supongo que es posible que un programa pueda escribirse sin errores, pero ¿el sistema operativo no tiene errores? ¿El compilador no tiene errores? ¿Qué tal el hardware real en el que se ejecuta?
- Tenga en cuenta que los sistemas operativos más antiguos ya no se actualizan, por lo que a veces pueden tener más errores que los nuevos.
- Los programadores desperdician muchos recursos y, a medida que las nuevas computadoras salen con más espacio disponible, usan rápidamente todo lo que tienen disponible. Esto hace que la nueva versión del programa se ejecute más lentamente en máquinas antiguas (si es que pueden ejecutarse)
Podría hablar durante horas sobre este tema, pero espero haberle dado al menos una idea de lo que está sucediendo.