프로그램이 종료 될 때 누수 된 메모리가 해제됩니까?


답변:


151

예, "메모리 누수"는 단순히 프로세스가 더 이상 참조하지 않으므로 더 이상 해제 할 수없는 메모리입니다. OS는 프로세스에 할당 된 모든 메모리를 계속 추적하고 해당 프로세스가 종료되면 메모리를 해제합니다.

대부분의 경우 OS는 Windows, Linux, Solaris 등의 일반 "기종"과 마찬가지로 메모리를 해제합니다. 그러나 다양한 실시간 운영 체제와 같은 특수 환경에서는 프로그램이 종료 될 때 메모리가 해제되지 않을 수 있습니다.


4
질문 : OS가 모든 할당을 추적합니까? 할당 한 힙 메모리는 프로세스의 가상 메모리 공간에서 비롯됩니다. 프로세스가 종료되면 해당 공간이 시스템 도매로 다시 제공됩니다. 어차피 할당을하는 프로세스가 (유저 랜드에서) 이러한 페이지에 액세스 할 수있는 유일한 프로세스이기 때문에 추가 부기가 필요한 이유를 알 수 없습니다. 아니면 잘못 배웠습니까?
Chris Tonkinson 2010-06-04

6
@Justin : OS를 모르면 이것이 타당하다고 생각하지 않습니다. 아마도 당신이 말하는 OS를 명시 적으로 지정할 수 있습니다.
Brian R. Bondy 2010-06-04

1
참고 : 표준은 이에 대해 아무 말도하지 않습니다. 또한 보장되지 않습니다. 이것이 전부는 아니지만 대부분의 최신 OS에서 작동하는 방식이지만 그럴 필요는 없었으며 과거에는 공통적이면서이 정리를 수행하지 않은 OS도있었습니다.
Edward Strange

5
누수로 인해 손실 된 메모리를 회수하지 않는 소형 장치 등을위한 다양한 실시간 OS가 있습니다. 귀하의 질문은 귀하가 말하는 OS에 따라 다릅니다.
Brian Neal

14
특정 메모리 보호 운영 체제를 사용하더라도 "누수"를 정의해야합니다. 응용 프로그램이 자체 메모리 공간 외부에 "시스템"리소스를 할당하는 것은 매우 가능합니다 (핸들은 Windows 세계에서 이러한 리소스를 식별하는 데 자주 사용됨). 애플리케이션을 닫아도 이러한 유형의 리소스가 항상 해제되는 것은 아닙니다.
데이비드

34

프로그램을 실행하는 OS는 일반적으로 명시 적으로 해제되지 않은 메모리를 정리하고 명시 적으로 닫히지 않은 처리를 수행하지만 이는 C ++ 표준에 의해 보장되지 않습니다. 메모리 누수를 해제하지 않는 일부 임베디드 장치를 찾을 수 있습니다.

Windows와 내가 본 모든 Linux 배포판은 메모리 누수를 해소합니다.

직접 테스트하기 위해 엄청난 메모리 누수 루프를 쉽게 만들 수 있습니다. RAM 사용량이 증가하는 것을 확인한 다음 프로그램을 닫습니다. RAM 사용량이 다시 줄어드는 것을 볼 수 있습니다.


C ++를 사용할 때 또 다른 고려 사항은 힙 할당 메모리를 삭제하지 않으면 소멸자도 호출되지 않는다는 것입니다. 소멸자가 호출되지 않으면 때때로 다른 부작용이있을 수 있습니다.


14

데스크톱 OS (Windows, Linux 등)에서 실행 중입니까? 그렇다면 일반적으로 시스템은 프로그램이 종료 될 때 프로그램과 관련된 모든 메모리를 해제합니다.


10

보통 그렇습니다. 일부 시스템은 프로그램이 종료 될 때 자동으로 해제되지 않는 공유 메모리 블록과 같은 것을 지원합니다. 대부분은 여전히 ​​참조 횟수를 유지하고이를 연 모든 프로그램이 종료 될 때 삭제하지만 일부는 그렇지 않습니다 (예 : 16 비트 Windows에는 아무 것도 참조하지 않아도 할당 된 상태로 유지되는 몇 가지 유형의 항목이 있습니다. 일반적으로 문제를 일으킬 정도로 축적되기 전에 다른 이유로 인해 충돌이 발생했습니다 ...)


5

내가 아는 한 최신 운영 체제는 프로그램이 종료되면이 메모리를 해제합니다.


4

누수 한 메모리에 따라 다릅니다. 일부 메모리는 OS에서 회수 할 수 없습니다. 그러나 대부분의 OS에서 대부분의 메모리는 프로세스가 종료 될 때 자동으로 회수됩니다.


6
일부 메모리는 OS에서 회수 할 수 없습니다.

2
일부 실시간 OS에서는 프로세스가 종료 될 때 정리되지 않는 특수 이더넷 버퍼 블록을 보았습니다.
Brian Neal

1
공유 메모리는 일시적인 프로세스를 사용할 수 있도록 유지하기를 원할 수 있으므로 일반적으로 재생되지 않습니다.
Brian Neal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.