메모리 누수
보이기
프로그램 실행 |
---|
일반 개념 |
코드의 종류 |
컴파일 전략 |
저명한 런타임 |
저명한 컴파일러 및 툴체인 |
|
컴퓨터 과학에서 메모리 누수(memory leak) 현상은 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비된다. 즉, 더 이상 불필요한 메모리가 해제되지 않으면서 메모리 할당을 잘못 관리할 때 발생한다.[1] 일부 서적에서 메모리 손실이라는 용어로 뜻을 옮기기도 하지만[2] leak라는 표현은 단순히 잃는 것 이상의 개념이므로 누수라는 표현이 더 정확하다.
결과
[편집]이 문단의 내용은 출처가 분명하지 않습니다. (2021년 2월) |
특히 다음의 경우, 메모리 누수에 대하여 더 심각하고 중요하게 고려하여야 한다.
- 메모리를 할당하며 오랫동안 실행되는 프로그램(서버의 백그라운드 작업이나 임베디드 장치)
- 메모리 할당 주기가 짧은 경우(컴퓨터 그래픽의 프레임 단위 처리)
- 공유 메모리와 같이 프로그램 종료 후에도 해제되지 않는 메모리를 할당하는 경우
- 임베디드 시스템이나 휴대용 장치와 같이 사용 가능한 메모리가 제한적인 경우
- 운영 체제나 메모리 관리자의 내부
- 시스템의 신뢰성에 심각한 영향을 미치는 경우(장치 드라이버)
- 프로그램을 종료할 때 운영체제에서 메모리 해제를 수행해 주지 않는 경우.
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. */
}
같이 보기
[편집]각주
[편집]- ↑ Crockford, Douglas. “JScript Memory Leaks”. 2012년 12월 7일에 원본 문서에서 보존된 문서. 2012년 11월 6일에 확인함.
- ↑ 네이버 책 :: 네이버는 책을 사랑합니다
외부 링크
[편집]- (영어) Memory Leak Detection in C++[깨진 링크(과거 내용 찾기)] - Cal Erickson
- (영어) Memory Leak Detection in Embedded Systems - Cal Erickson
이 글은 컴퓨터 과학에 관한 토막글입니다. 여러분의 지식으로 알차게 문서를 완성해 갑시다. |