C 및 C++에서 스마트 포인터 또는 다른 이상한 가비지 수집 메커니즘을 사용하지 않는다고 가정하면 프로그램이 종료 될 때 메모리가 할당 해제됩니다 (가비지 수집)?C/C++의 객체는 프로그램 종료 후 가비지 수집을합니까?
답변
예, 사용하지 않는 메모리는 프로그램 종료시 운영 체제에 의해 자동으로 해제됩니다. 즉, 언제든지 exit()
을 호출하는 것이 일반적으로 안전합니다. Windows 및 명명 된 파이프 등의 전역 원자와 같이 자동으로 해제되지 않는 다른 리소스에 대해서는주의해야합니다.
* 대부분의 * 운영 체제. C 표준에는 OS/필수/당신을 치료해야한다고 말하는 것은 없습니다. – tangrs
프로그램이 운영 체제가 없거나 운영 체제 또는 커널 드라이버 인 경우를 제외하고는 : –
@tangrs : 표준과 관련하여 누가이 점에 관해 아이스크림을 제공합니까? 실용적으로하십시오. –
거의 모든 플랫폼에서 프로세스가 소유하고있는 모든 자원은 프로세스 종료시 OS에 의해 복구됩니다 (예 : SYSV-IPC와 같은 특정 종류의 공유 자원).
메모리는 C++에서 전혀 수집되지 않으며, 소멸자는 실행되지 않습니다. 그러나 프로그램이 종료 될 때 프로세스를 정리하는 과정에서 메모리 또는 기타 프로그램에서 사용합니다. 다른 자원이는 C 표준이 있지만, 일반적인 OS가 당신을 위해 메모리를 할당 해제에 대해 아무것도 말하지 않는다 C.
에 지정되지 않은 등
잠금, 공유 메모리, 네트워크 연결, 파일 핸들, 수 있습니다.
프로세스가 종료되면 OS는 할당 된 가상 메모리를 제거합니다.
전체 주소 공간이 사라 지므로 내부의 모든 개체도 마찬가지입니다.
그러나 C++ 가비지 수집과 동일하지 않으므로 소멸자가 호출되지 않습니다. 메모리가 조용히 운영 체제로 돌아갑니다.
가비지 콜렉션이 아니라고 말하면 +1. –
- 1. AS3 : 익명 객체가 가비지 수집을합니까?
- 2. 파이썬 함수가 왜 가비지 수집을합니까?
- 3. 프로그램 종료 후 무한 루프
- 4. 프로그램 종료 후 콘솔 출력을 막는 방법
- 5. 응용 프로그램 종료 후 환경 변수 유지
- 6. 프로그램 종료 후 해제되지 않은 메모리는 어떻게됩니까?
- 7. 처리되지 않은 예외 후 응용 프로그램 종료
- 8. Ruby는 프로그램 종료 후 콘솔 명령 행으로갑니다.
- 9. 예외 발생 (오류 발생) 프로그램 종료 후
- 10. 양식 닫기 후 응용 프로그램 종료
- 11. 응용 프로그램 종료 후 사용한 어셈블리 삭제
- 12. 자바 - 프로그램 실행 후 종료 컴퓨터
- 13. 종료 후 iPhone 응용 프로그램 상태 유지
- 14. 종료 후 PHP 응용 프로그램 디버그
- 15. Cc의 ProperCase에 대한 mcdonalds
- 16. 스크립트 종료 후 화면 종료
- 17. 기간 종료 후 브라우저 종료
- 18. 응용 프로그램 종료 프로세스 종료 이벤트
- 19. http.Clientrequest.abort() 프로그램 종료
- 20. C 프로그램 종료
- 21. 출시 후 Android 프로세스 종료
- 22. xcodebuild에서 cc의 잘못된 실행 경로
- 23. Go 컴파일러 (gc)에서 가비지 수집이 작동합니까?
- 24. 종료 후 크래시 디버깅? (메인 반환 후)
- 25. 시뮬레이션 후 종료 Windows
- 26. 오류 종료 후 정리?
- 27. 종료 후 EXPE 잠긴
- 28. 종료 후 복원
- 29. 응용 프로그램 종료 C# Windows
- 30. 모든 세션 종료 응용 프로그램 종료 이벤트
가비지 수집이 아닙니다. 그러나 프로세스에 할당 된 메모리는 프로세스가 종료 될 때 교정됩니다. – Joe
이것은 프로그래밍 언어가 아닌 운영 체제에 관한 질문입니다. –
스마트 포인터는 "이상한 가비지 수집 메커니즘"이 아닙니다. 오히려, 그들은 쓰레기를 생산하지 않는 * 깨끗한 메커니즘입니다! –