2011-09-19 3 views
5

Google에서 예외를 사용하지 않는 Google C++ 코딩 표준을 읽었습니다. 예외가 사용되지 않으면 프로그램에서 오류가 발생할 때 메모리를 어떻게 비 웁니 까?C++ 프로그램이 충돌 할 때 자동으로 메모리를 해제합니까?

예를 들어 f()는 g()를 호출하고 g()에 오류가 있으면 g()에 할당 된 모든 메모리를 비운 다음 f()에 예외를 호출해야합니다. f()가 예외를 잡으면 f()는 f()에 할당 된 모든 메모리를 해제하고 프로그램을 종료합니다.

예외가 사용되지 않고 g()에 오류가 있으면 exit(0)을 강제 종료 할 수 있으며 할당 된 모든 메모리를 확보 할만큼 C++ 프로그램이 스마트합니까? 내 생각 엔, C++은 스택과 힙을 유지하고, 일단 프로그램이 종료되면 C++은 스택과 힙을 모두 자동으로 해제 할 것입니까?

+5

일반적으로 메모리를 회수하는 OS입니다. –

+2

전체 프로세스가 충돌 한 다음 예, 메모리가 OS에서 해제됩니다. 어떤 언어로 프로그램을 작성했는지에 관계없이. – clamp

+0

예외를 금지하면 C++이라고 주장하는 것은 다소 사기성이 있습니다. 그것은 당신의 운전자에게 차를 제공하는 것과 같지만 그가 연료를 사용하지 않는 경우에만합니다. –

답변

7

운영 체제는 어떤 이유로 든 프로세스가 종료 될 때 사용 된 모든 메모리 및 파일 핸들을 정리합니다.

-2

Windows에서 COM 힙 메모리와 같은 일부 메모리 유형을 해제 할 수 없다고 들었습니다. 그러나 은 대부분 메모리/핸들이 정리되었는데, 이는 운영 체제가 응용 프로그램이 충돌 한 상태에 대처해야하기 때문입니다. 프로세스 로컬 메모리와 파일 핸들과 같은 대부분의 핸들에서 확실히 보장 할 수 있습니다. 일반적으로 응용 프로그램이 종료 된 후에 OS가 정리 될 것이라고 가정 할 수 있습니다.

또한 Google의 스타일 가이드를 따르지 않습니다. 그것은 C++을위한 것이 아닙니다. C++을 위해서 빼앗아 버려야 할 모든 것을 뺀 것입니다. 그것은 구글에게는 효과적 일 수 있습니다. (의심스럽게) 그러나 그것은 다른 누구에게도 효과가 없을 것입니다.

관련 문제