메모리 누수

컴퓨터 과학에서 메모리 누수(memory leak) 현상은 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비된다. 즉, 더 이상 불필요한 메모리가 해제되지 않으면서 메모리 할당을 잘못 관리할 때 발생한다.[1] 일부 서적에서 메모리 손실이라는 용어로 뜻을 옮기기도 하지만[2] leak라는 표현은 단순히 잃는 것 이상의 개념이므로 누수라는 표현이 더 정확하다.

결과

특히 다음의 경우, 메모리 누수에 대하여 더 심각하고 중요하게 고려하여야 한다.

  • 메모리를 할당하며 오랫동안 실행되는 프로그램(서버의 백그라운드 작업이나 임베디드 장치)
  • 메모리 할당 주기가 짧은 경우(컴퓨터 그래픽의 프레임 단위 처리)
  • 공유 메모리와 같이 프로그램 종료 후에도 해제되지 않는 메모리를 할당하는 경우
  • 임베디드 시스템이나 휴대용 장치와 같이 사용 가능한 메모리가 제한적인 경우
  • 운영 체제나 메모리 관리자의 내부
  • 시스템의 신뢰성에 심각한 영향을 미치는 경우(장치 드라이버)
  • 프로그램을 종료할 때 운영체제에서 메모리 해제를 수행해 주지 않는 경우.

C에서의 단순 예시

다음 C 함수는 할당된 메모리의 포인터를 손실함으로써 메모리 누수를 일으킨다.

#include <stdlib.h>

void function_which_allocates(void) {
    /* allocate an array of 45 floats */
    float *a = malloc(sizeof(float) * 45);

    /* additional code making use of 'a' */

    /* return to main, having forgotten to free the memory we malloc'd */
}

int main(void) {
    function_which_allocates();

    /* the pointer 'a' no longer exists, and therefore cannot be freed,
     but the memory is still allocated. a leak has occurred. */
}

같이 보기

각주

  1. Crockford, Douglas. “JScript Memory Leaks”. 2012년 12월 7일에 원본 문서에서 보존된 문서. 2012년 11월 6일에 확인함. 
  2. 네이버 책 :: 네이버는 책을 사랑합니다

외부 링크