2012-02-25 21 views
0

C 및 C++에서 스마트 포인터 또는 다른 이상한 가비지 수집 메커니즘을 사용하지 않는다고 가정하면 프로그램이 종료 될 때 메모리가 할당 해제됩니다 (가비지 수집)?C/C++의 객체는 프로그램 종료 후 가비지 수집을합니까?

+4

가비지 수집이 아닙니다. 그러나 프로세스에 할당 된 메모리는 프로세스가 종료 될 때 교정됩니다. – Joe

+3

이것은 프로그래밍 언어가 아닌 운영 체제에 관한 질문입니다. –

+3

스마트 포인터는 "이상한 가비지 수집 메커니즘"이 아닙니다. 오히려, 그들은 쓰레기를 생산하지 않는 * 깨끗한 메커니즘입니다! –

답변

1

예, 사용하지 않는 메모리는 프로그램 종료시 운영 체제에 의해 자동으로 해제됩니다. 즉, 언제든지 exit()을 호출하는 것이 일반적으로 안전합니다. Windows 및 명명 된 파이프 등의 전역 원자와 같이 자동으로 해제되지 않는 다른 리소스에 대해서는주의해야합니다.

+5

* 대부분의 * 운영 체제. C 표준에는 OS/필수/당신을 치료해야한다고 말하는 것은 없습니다. – tangrs

+0

프로그램이 운영 체제가 없거나 운영 체제 또는 커널 드라이버 인 경우를 제외하고는 : –

+0

@tangrs : 표준과 관련하여 누가이 점에 관해 아이스크림을 제공합니까? 실용적으로하십시오. –

3

거의 모든 플랫폼에서 프로세스가 소유하고있는 모든 자원은 프로세스 종료시 OS에 의해 복구됩니다 (예 : SYSV-IPC와 같은 특정 종류의 공유 ​​자원).

1

메모리는 C++에서 전혀 수집되지 않으며, 소멸자는 실행되지 않습니다. 그러나 프로그램이 종료 될 때 프로세스를 정리하는 과정에서 메모리 또는 기타 프로그램에서 사용합니다. 다른 자원이는 C 표준이 있지만, 일반적인 OS가 당신을 위해 메모리를 할당 해제에 대해 아무것도 말하지 않는다 C.

에 지정되지 않은 등

1

잠금, 공유 메모리, 네트워크 연결, 파일 핸들, 수 있습니다.

7

프로세스가 종료되면 OS는 할당 된 가상 메모리를 제거합니다.

전체 주소 공간이 사라 지므로 내부의 모든 개체도 마찬가지입니다.

그러나 C++ 가비지 수집과 동일하지 않으므로 소멸자가 호출되지 않습니다. 메모리가 조용히 운영 체제로 돌아갑니다.

+0

가비지 콜렉션이 아니라고 말하면 +1. –

관련 문제