메모리 누수(Memory Leak)란?

malloc 등으로 확보한 메모리를 다 쓴 뒤에도 free로 해제하지 않고, 그 영역을 가리키는 포인터도 잃어버려서 사용할 수 있는 메모리가 줄어드는 결함. 오류로 도중에 돌아가는 경로에서 해제를 잊는 경우가 많다. 짧은 프로그램에서는 종료 시에 OS가 회수하므로 눈에 띄지 않지만, 오랫동안 계속 동작하는 서버나 임베디드 기기에서는 조금씩 빈 메모리가 줄어 결국 확보에 실패한다. Valgrind나 AddressSanitizer(LeakSanitizer) 등으로 검출할 수 있다.

일본어 명칭: メモリリーク

메모리 누수(Memory Leak)은(는) 링커, 로더, 실행 파일, C 언어 기초 등 2개 분야의 연습 문제 2개에 나와요.

분야: C 언어 기초

도전해 보기: 메모리 누수(Memory Leak) 관련 문제

C 언어의 malloc으로 확보한 메모리는 일반적으로 프로세스의 어느 영역에서 가져옵니까?

  1. A.text 섹션
  2. B힙
  3. C.rodata 섹션
정답과 해설 보기

정답: B. 힙

힙은 프로그램 실행 중에 필요한 크기의 메모리를 확보하고, 필요 없어지면 free로 반환하는 영역입니다. 확보하는 크기나 수명을 실행 시에 정할 수 있는 것이 특징입니다. malloc은 스스로 빈 영역을 관리하고, 부족해지면 OS에 요청하여 영역을 넓힙니다(Linux에서는 brk나 mmap 시스템 콜). free를 잊으면 쓰지 않는 메모리가 계속 남는 메모리 누수가 됩니다.

해설 속 메모리 누수(Memory Leak)

메모리 누수(Memory Leak)이(가) 나오는 문제 (2)

  1. C 언어의 malloc으로 확보한 메모리는 일반적으로 프로세스의 어느 영역에서 가져옵니까?
  2. fill과 use는 따로 정의된 함수로 한다. 위의 함수의 문제점으로 올바른 것은?

관련 용어

동적 메모리 할당(Dynamic Memory Allocation) 시스템 콜(system call) 공용체(union) 구조체(struct) 댕글링 포인터(Dangling Pointer) 매크로(Macro) 미정의 동작(Undefined Behavior) 버퍼 오버플로(Buffer Overflow) 비트 필드(Bit-field) 전처리기(Preprocessor)

용어집으로 돌아가기