Este artículo discutirá qué pérdida de memoria es y luego proporciona una descripción detallada sobre cómo encontrar pérdidas de memoria En un código o proyecto C ++.
Qué es una pérdida de memoria
Un problema informático llamado pérdida de memoria hace que la memoria sea asignada y liberada de manera incorrecta. Cuando el programa ya no está utilizando la memoria dentro de un programa, la memoria debe liberarse al sistema operativo, lo que permite el uso eficiente de toda la memoria disponible en un sistema. Sin embargo, cuando un programa no suele liberar la memoria asignada y continúa accediendo a ella después de que se haya servido su utilidad, pérdidas de memoria puede ocurrir. Esto puede hacer que la memoria se consuma o 'filtrado'Hasta que el sistema se quede sin memoria libre y el programa se bloquee. Dado que todos los sistemas tienen una cantidad finita de memoria y debido a que la memoria es costosa, la utilización de la memoria de un programa aumentará si contiene pérdidas de memoria. Por lo tanto, causará problemas.
Cómo encontrar fugas de memoria en un código o proyecto C ++?
Hay algunas formas básicas en que puede usar para detectar fugas de memoria en un código C ++.
1: Verifique los conceptos básicos de los operadores
Conocer los fundamentos de los operadores. El nuevo operador asigna una memoria de montón. La memoria de montón se libera utilizando el operador Eliminar. Para liberar la misma memoria que se asignó, debe hacer un eliminación después de cada nuevo, de lo contrario, existe la posibilidad de pérdida de memoria.
2: reasignar solo después de la eliminación
Reasignar una memoria solo después de haber eliminado su primera asignación. Si una variable obtiene una nueva dirección para una segunda asignación, la primera dirección y los bytes asociados con ella se pierden permanentemente, lo que da como resultado pérdida de memoria.
3: Verifique los punteros asignados
Observe los punteros asignados. Cada variable dinámica (memoria asignada en el montón) debe conectarse a un puntero. Es difícil eliminar una variable dinámica después de que se separa de su puntero (s). Una vez más, esto causa un pérdida de memoria.
4: Verifique los punteros locales
Use consejos locales con cuidado. Cuando define un puntero en una función, la variable dinámica a la que señala se asigna en el montón, no en la pila. Permanecerá si no lo elimina incluso después de que el programa esté terminado de causar pérdidas de memoria.
5: use soportes cuadrados después de eliminar cuidadosamente
Tome nota de los soportes cuadrados que siguen "borrar". Para liberar un solo elemento, use Eliminar solo. Para liberar una matriz de montón, use Eliminar [] encerrado en soportes cuadrados.
Cómo evitar fugas de memoria?
Programa para evitar fugas de memoria
Por ejemplo:
#incluir
#incluir
usando el espacio de nombres STD;
void func_to_handle_mem_leak ()
int* ptr = new int (5);
cout<
int main ()
func_to_handle_mem_leak ();
regresar 0;
El puntero en el programa anterior no se elimina después de su asignación. Esto causa el pérdida de memoria En el código C ++ anterior.
#incluir
#incluir
usando el espacio de nombres STD;
void func_to_handle_mem_leak ()
int* ptr = new int (5);
cout<eliminar (ptr);
int main ()
func_to_handle_mem_leak ();
regresar 0;
En este código, estamos eliminando el puntero en la función definida por el usuario, por lo tanto pérdida de memoria se evita.
Producción
Conclusión
Pérdidas de memoria dentro de un programa puede tener resultados perjudiciales si el programa es pequeño o grande. Resolver pérdidas de memoria, Las herramientas de análisis estático, las herramientas de diagnóstico y las herramientas de depuración son parte integral para encontrar y solucionar el problema. Como tal, el código o proyectos C ++ debe examinarse y analizarse regularmente para detectar cualquier pérdidas de memoria, Usando las herramientas y técnicas anteriores, puede mitigar las filtraciones de memoria en un código C ++.