requisitos que leak juego game descargar memory-leaks operating-system

memory leaks - que - ¿Una pérdida de memoria de la aplicación causa una pérdida de memoria del sistema operativo?



memory leak requisitos (9)

Cuando decimos que un programa pierde memoria, diga un nuevo sin eliminar en c ++, ¿realmente pierde ? Quiero decir, cuando finaliza el programa, ¿la memoria aún está asignada a algún programa que no se está ejecutando y no se puede utilizar, o el sistema operativo sabe qué memoria solicitó cada programa y la libera cuando finaliza el programa? Si ejecuto ese programa muchas veces, ¿me quedaré sin memoria?


Cuando el proceso termina, la memoria se borra también. El problema es que si un programa pierde memoria, solicitará que se ejecute cada vez más sistemas operativos, y posiblemente puede bloquear el sistema operativo.


El sistema operativo devuelve la memoria perdida después de que la ejecución se haya detenido.

Es por eso que no siempre es un gran problema con las aplicaciones de escritorio, pero es un gran problema con los servidores y los servicios (tienden a ejecutarse durante mucho tiempo).

Veamos el siguiente escenario:

  1. Programa A pedir memoria del sistema operativo.
  2. El sistema operativo marca el bloque X como utilizado por A y lo devuelve al programa.
  3. El programa debe tener un puntero a X.
  4. El programa devuelve la memoria.
  5. El sistema operativo marca el bloque como libre. Usar el bloque ahora resulta en una violación de acceso.
  6. El programa A finaliza y toda la memoria utilizada por A se marca como no utilizada.

Nada de malo con eso.

Pero si la memoria se asigna en un bucle y se olvida la eliminación, se producen problemas reales:

  1. Programa A pedir memoria del sistema operativo.
  2. El sistema operativo marca el bloque X como utilizado por A y lo devuelve al programa.
  3. El programa debe tener un puntero a X.
  4. Goto 1

Si el sistema operativo se queda sin memoria, el programa probablemente se bloqueará.


El sistema operativo puede liberar la memoria cuando el programa termina. Si existe una fuga en un programa, entonces es solo un problema mientras el programa se está ejecutando. Este es un problema para los programas de ejecución prolongada, como los procesos del servidor. O, por ejemplo, si su navegador web tuviera una pérdida de memoria y la mantuviera funcionando durante días, gradualmente consumiría más memoria.


En los sistemas operativos con memoria protegida (Mac OS 10+, todos los clones Unix, como Linux, y los sistemas Windows basados ​​en NT que significan Windows 2000 y más jóvenes), la memoria se libera cuando finaliza el programa.

Si ejecuta cualquier programa con la frecuencia suficiente sin cerrarlo (ejecutando más y más instancias al mismo tiempo), finalmente se quedará sin memoria, independientemente de si hay una pérdida de memoria o no, por lo que también es cierto para los programas con pérdidas de memoria. Obviamente, los programas que pierden memoria llenarán la memoria más rápido que un programa idéntico sin pérdidas de memoria, pero la cantidad de veces que puede ejecutarlo sin llenar la memoria depende mucho más de cuánta memoria necesita ese programa para su funcionamiento normal que si hay una pérdida de memoria o no. Esa comparación realmente no vale nada a menos que esté comparando dos programas completamente idénticos, uno con una pérdida de memoria y otro sin.

Las fugas de memoria se vuelven más serias cuando tienes un programa en ejecución por mucho tiempo. Ejemplos clásicos de esto es el software de servidor, como los servidores web. Con los juegos o los programas de hoja de cálculo o los procesadores de texto, por ejemplo, las pérdidas de memoria no son tan serias porque eventualmente cierras esos programas, liberando la memoria. Pero, por supuesto, las fugas de memoria son pequeñas bestias desagradables que siempre deben abordarse por principio.

Pero como se indicó anteriormente, todos los sistemas operativos modernos liberan la memoria cuando el programa se cierra, por lo que incluso con una pérdida de memoria, no llenará la memoria si está continuamente abriendo y cerrando el programa.


No, en todos los sistemas operativos prácticos, cuando un programa sale, todos los recursos son reclamados por el sistema operativo. Las fugas de memoria se convierten en un problema más serio en los programas que pueden continuar ejecutándose durante un tiempo prolongado y en funciones que pueden llamarse a menudo desde el mismo programa.


No. Una vez que el sistema operativo termina de cerrar el programa, la memoria regresa (dado un sistema operativo razonablemente moderno). El problema es con los procesos de larga ejecución.


Por lo que sé, en la mayoría de los sistemas operativos cuando se inicia un programa, recibe un segmento definido de memoria que se liberará completamente una vez que finalice el programa.

Las fugas de memoria son una de las razones principales por las que se inventaron los algoritmos de recolección de basura, ya que, una vez conectados al tiempo de ejecución, se vuelven responsables de reclamar la memoria que ya no es accesible por un programa.


Se está filtrando más en el sentido de que el código en sí no tiene más control sobre la pieza de memoria.


Las fugas de memoria no persisten hasta el final de la ejecución, por lo que una "solución" a cualquier fuga de memoria es simplemente finalizar la ejecución del programa. Obviamente, esto es más un problema en ciertos tipos de software. Tener un servidor de base de datos que necesita desconectarse cada 8 horas debido a pérdidas de memoria es más un problema que un videojuego que debe reiniciarse después de 8 horas de juego continuo.

El término "fuga" se refiere al hecho de que, con el tiempo, el consumo de memoria aumentará sin mayores beneficios. La memoria "filtrada" no es utilizada por el programa ni puede ser utilizada por el sistema operativo (y otros programas).

Lamentablemente las fugas de memoria son muy comunes en el código no administrado. He tenido Firefox funcionando durante un par de días y el uso de la memoria es de 424 MB a pesar de que solo tengo 4 pestañas abiertas. Si cerrara Firefox y volviera a abrir las mismas pestañas, el uso de la memoria probablemente sería <100MB. Así 300+ MB ha "filtrado".