프로그래머가 힙에 메모리를 생성하고 삭제하는 것을 잊었을 때 메모리 누수가 발생합니다.
메모리 누수로 인해 사용 가능한 메모리 양이 줄어들어 컴퓨터 성능이 저하됩니다. 결국 최악의 경우에는 사용 가능한 메모리가 너무 많이 할당되거나, 시스템이나 장치의 전부 또는 일부가 제대로 작동하지 않거나, 응용 프로그램이 실패하거나, 시스템 속도가 크게 느려질 수 있습니다.
메모리 누수는 정의에 따라 절대 종료되지 않는 데몬 및 서버와 같은 프로그램의 경우 특히 심각한 문제입니다.
메모리 누수의 예
아래 예는 메모리 누수 개념을 보여줍니다.
자바 연결
씨
/* Function with memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Return without freeing ptr*/> >return>;> }> |
>
>
C에서 메모리 누수의 원인
- 동적으로 할당된 메모리가 free를 호출하여 해제되지 않으면 메모리 누수가 발생합니다. 항상 malloc이나 calloc을 사용하는 모든 동적 메모리 할당에 대해 해당하는 free 호출이 있는지 확인하세요.
- 할당된 메모리를 참조하는 포인터 트랙이 손실되면 메모리가 해제되지 않을 수 있습니다. 따라서 모든 포인터를 추적하고 메모리가 해제되었는지 확인하십시오.
- 프로그램이 갑자기 종료되고 할당된 메모리가 해제되지 않거나 코드의 일부가 해제 호출을 방해하는 경우 메모리 누수가 발생할 수 있습니다.
메모리 누수를 방지하는 방법은 무엇입니까?
메모리 누수를 방지하려면 힙에 할당된 메모리가 더 이상 필요하지 않을 때 항상 해제되어야 합니다.
예: 메모리 누수를 방지하기 위해 힙에 할당된 메모리를 해제하는 프로그램
아래 프로그램은 메모리 누수를 방지하기 위해 힙에 할당된 메모리가 해제되는 것을 보여줍니다.
씨
/* Function without memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Memory allocated by malloc is released */> >free>(ptr);> >return>;> }> |
>
>
예: 메모리가 해제되었는지 확인하는 프로그램
아래 예제에서는 힙에 할당된 메모리가 해제되었는지 확인하는 방법을 보여줍니다.
씨
// C Program to check whether the memory is> // freed or not> #include> #include> int> main(>void>)> {> >int>* ptr;> >ptr = (>int>*)>malloc>(>sizeof>(>int>));> >if> (ptr == NULL)> >printf>(>'Memory Is Insuffficient
'>);> >else> {> >free>(ptr);> >printf>(>'Memory Freed
'>);> >}> }> // This code is contributed by sarajadhav12052009> |
>
>산출
Memory Freed>
결론
결론적으로, 힙에 메모리를 할당했지만 해제하거나 해제하는 것을 잊어버린 경우 메모리 누수가 발생할 수 있습니다. 메모리 누수로 인해 성능 저하가 발생하고 시스템이 불안정해질 수 있습니다. 메모리 누수는 서버와 같이 오랫동안 실행되는 프로그램에 더 많은 피해를 입힙니다. 메모리 누수를 방지하려면 free()와 같은 함수를 호출하여 동적으로 할당된 메모리를 해제해야 합니다.