|
new 든 malloc 이든 GlobalAlloc 이든 동적 할당한 메모리는 프로그램의 종료와 함께 해제됩니다.
이는 가상보호메모리 시스템에서 당연히 지원되어야 할 부분이고, 정상적인 운영체제라면 그렇게 작동합니다.
과거에는 그렇지 못한 운영체제도 있었고, 가령 Windows2000 이하 에서 ReleaseDC가 제대로 안된다든지
운영체제들이 가지는 자체적인 자원 반환률을 떨어뜨리는 버그들은 존재하지요.
그럼에도 불구하고 열심히 해제하는 버릇을 들여야 하는것은, 해당모듈을 DLL로 싸서 다른 모듈위에 얹는다든지
단독 실행화일이 아닌 형태로 가공할 가능성을 두고 있기 때문이죠.
OS별로 메모리특성에 대해서는 특별히 정리된 자료들이 없어 스스로 조사해 두어야합니다.
버전마다 모델마다 버그가 있을 수 있고, 특별한 공유 자원들도 있으니까요.
궁금하시면
프로젝트를 하나 여시고 작업관리자를 띄우신 다음에 할당된 메모리를 주시하시고
한 줄 짜 보세요.
char a = new char[100000000]; 100 메가 할당입니다.
그리고 실행하시면
사용메모리가 100메가 이상 증가 할꺼고
종료하시면 해제 없이도 문제없이 반환되는걸 볼 수 있습니다.
조상진 님이 쓰신 글 :
: 커널 객체 이외에는 메모리에 남는것 아니었나요.. ㅇㅅㅇ)?
:
: 여태 이렇게 알고 있었는데요..;;
:
: 좀더 자세히 설명좀 부탁드려요 __);
|