¿Qué significan las pérdidas y los desbordamientos de memoria y cuáles son sus diferencias?
Los conceptos de pérdida de memoria y desbordamiento de memoria, y sus diferencias. Los detalles son los siguientes:
1. Concepto
Desbordamiento de memoria (sin memoria): significa que cuando el programa solicita memoria, no hay suficiente espacio de memoria para usar. y se produce falta de memoria. Por ejemplo, si solicita un número entero pero almacena un número que solo se puede almacenar en un período largo, se trata de un desbordamiento de memoria.
Pérdida de memoria: significa que después de que el programa solicita memoria, no puede liberar el espacio de memoria que ha solicitado. El daño de una pérdida de memoria se puede ignorar, pero las consecuencias de la acumulación de pérdidas de memoria sí lo son. Muy serio, no importa cuánta memoria, tarde o temprano, se consuma.
2. Diferencia
El desbordamiento de memoria significa que cuando el programa solicita memoria, no hay suficiente espacio de memoria para usar y el sistema ya no puede asignar el espacio que necesita. ; pérdida de memoria Significa que después de que el programa solicita memoria, no puede liberar el espacio de memoria asignado. Se puede ignorar el daño de una pérdida de memoria, pero múltiples pérdidas de memoria provocarán un desbordamiento de la memoria.
Desbordamiento de memoria significa que la memoria que solicitas asignar excede lo que el sistema puede darte y el sistema no puede satisfacer la demanda, por lo que se produce un desbordamiento.
Clasificación de las pérdidas de memoria
1. Pérdidas de memoria frecuentes. El código con pérdidas de memoria se ejecutará varias veces, lo que provocará una pérdida de memoria cada vez que se ejecute.
2. Pérdidas de memoria ocasionales. El código que causa pérdidas de memoria solo ocurrirá bajo ciertas circunstancias u operaciones. Frecuentes y esporádicas son relativas. En determinadas circunstancias, lo ocasional puede volverse común. Por tanto, el entorno de prueba y los métodos de prueba son cruciales para detectar pérdidas de memoria.
3. Pérdida de memoria única. El código que causa una pérdida de memoria solo se ejecutará una vez o, debido a fallas algorítmicas, siempre habrá solo un bloque de memoria perdido. Por ejemplo, si se asigna memoria en el constructor de una clase, pero no se libera en el destructor, la pérdida de memoria solo ocurrirá una vez.
4. Pérdida de memoria implícita. El programa asigna memoria continuamente mientras se ejecuta, pero no la libera hasta el final. Estrictamente hablando, aquí no hay pérdida de memoria, porque el programa finalmente libera toda la memoria solicitada. Pero para un programa de servidor que necesita ejecutarse durante días, semanas o incluso meses, no liberar memoria a tiempo también puede provocar el agotamiento de toda la memoria del sistema. Por lo tanto, a este tipo de pérdida de memoria lo llamamos pérdida de memoria implícita.