내가 프로그래밍 한 경우 (알지 못하고) 메모리 누수 및 응용 프로그램이 종료되면 누수 된 메모리가 해제됩니까?
내가 프로그래밍 한 경우 (알지 못하고) 메모리 누수 및 응용 프로그램이 종료되면 누수 된 메모리가 해제됩니까?
답변:
예, "메모리 누수"는 단순히 프로세스가 더 이상 참조하지 않으므로 더 이상 해제 할 수없는 메모리입니다. OS는 프로세스에 할당 된 모든 메모리를 계속 추적하고 해당 프로세스가 종료되면 메모리를 해제합니다.
대부분의 경우 OS는 Windows, Linux, Solaris 등의 일반 "기종"과 마찬가지로 메모리를 해제합니다. 그러나 다양한 실시간 운영 체제와 같은 특수 환경에서는 프로그램이 종료 될 때 메모리가 해제되지 않을 수 있습니다.
프로그램을 실행하는 OS는 일반적으로 명시 적으로 해제되지 않은 메모리를 정리하고 명시 적으로 닫히지 않은 처리를 수행하지만 이는 C ++ 표준에 의해 보장되지 않습니다. 메모리 누수를 해제하지 않는 일부 임베디드 장치를 찾을 수 있습니다.
Windows와 내가 본 모든 Linux 배포판은 메모리 누수를 해소합니다.
직접 테스트하기 위해 엄청난 메모리 누수 루프를 쉽게 만들 수 있습니다. RAM 사용량이 증가하는 것을 확인한 다음 프로그램을 닫습니다. RAM 사용량이 다시 줄어드는 것을 볼 수 있습니다.
C ++를 사용할 때 또 다른 고려 사항은 힙 할당 메모리를 삭제하지 않으면 소멸자도 호출되지 않는다는 것입니다. 소멸자가 호출되지 않으면 때때로 다른 부작용이있을 수 있습니다.
누수 한 메모리에 따라 다릅니다. 일부 메모리는 OS에서 회수 할 수 없습니다. 그러나 대부분의 OS에서 대부분의 메모리는 프로세스가 종료 될 때 자동으로 회수됩니다.