프로그램이 종료 될 때 누수 된 메모리가 해제됩니까?
내가 프로그래밍 한 경우 (알지 못하고) 메모리 누수 및 응용 프로그램이 종료되면 누수 된 메모리가 해제됩니까?
예, "메모리 누수"는 단순히 프로세스가 더 이상 참조하지 않으므로 더 이상 해제 할 수없는 메모리입니다. OS는 프로세스에 할당 된 모든 메모리를 계속 추적하고 해당 프로세스가 종료되면 메모리를 해제합니다.
대부분의 경우 OS는 Windows, Linux, Solaris 등의 일반적인 "기종"과 마찬가지로 메모리를 해제합니다. 그러나 다양한 Real-Time 운영 체제와 같은 특수한 환경에서는 프로그램이 종료 될 때 메모리가 해제되지 않을 수 있습니다.
프로그램을 실행하는 OS는 일반적으로 명시 적으로 해제되지 않은 메모리를 정리하고 명시 적으로 닫히지 않은 처리를 수행하지만 이는 C ++ 표준에 의해 보장되지 않습니다. 메모리 누수를 해제하지 않는 일부 임베디드 장치를 찾을 수 있습니다.
Windows와 내가 본 모든 Linux 배포판은 메모리 누수를 해소합니다.
직접 테스트하기 위해 엄청난 메모리 누수 루프를 쉽게 만들 수 있습니다. RAM 사용량이 증가하는 것을 확인한 다음 프로그램을 닫습니다. RAM 사용량이 다시 줄어드는 것을 볼 수 있습니다.
C ++를 사용할 때 또 다른 고려 사항은 힙 할당 메모리를 삭제하지 않으면 소멸자도 호출되지 않는다는 것입니다. 소멸자가 호출되지 않으면 때때로 다른 부작용이있을 수 있습니다.
데스크톱 OS (Windows, Linux 등)에서 실행 중입니까? 그렇다면 일반적으로 시스템은 프로그램이 종료 될 때 프로그램과 관련된 모든 메모리를 해제합니다.
보통 그렇습니다. 일부 시스템은 프로그램이 종료 될 때 자동으로 해제되지 않는 공유 메모리 블록과 같은 것을 지원합니다. 대부분은 여전히 참조 횟수를 유지하고이를 연 모든 프로그램이 종료 될 때 삭제하지만 일부는 그렇지 않습니다 (예 : 16 비트 Windows에는 아무 것도 참조하지 않아도 할당 된 상태로 유지되는 몇 가지 유형의 항목이 있습니다. 일반적으로 문제를 일으킬 정도로 축적되기 전에 다른 이유로 인해 충돌이 발생했습니다 ...)
누수 한 메모리에 따라 다릅니다. 일부 메모리는 OS에서 회수 할 수 없습니다. 그러나 대부분의 OS에서 대부분의 메모리는 프로세스가 종료 될 때 자동으로 회수됩니다.
내가 아는 한 최신 운영 체제는 프로그램이 종료되면이 메모리를 해제합니다.
참고 URL : https://stackoverflow.com/questions/2975831/is-leaked-memory-freed-up-when-the-program-exits
'Programing' 카테고리의 다른 글
IIS 7 사이트를 다른 서버로 어떻게 마이그레이션합니까? (0) | 2020.08.23 |
---|---|
Vim 세션이 현재 사용하는 색상 표를 확인하는 방법 (0) | 2020.08.23 |
네이티브 애플리케이션 개발을위한 Phonegap 사용 (0) | 2020.08.23 |
pfx 형식을 p12로 변환 (0) | 2020.08.23 |
Android junit 테스트 케이스에서 테스트 프로젝트의 컨텍스트 가져 오기 (0) | 2020.08.23 |