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


답변:


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.