[API]GDI 오브젝트 해제, 삭제를 하지 않을 경우 리소스와 연관성이 궁금합니다.
지금 윈도우즈 API 정복을 보고 있습니다. 이 책의 예제 중 하나(p167)가 GDI 오브젝트를 해제하지 않을 때 시스템이 어떤 상태로 되는지 살펴보는 것입니다.
삭제를 하지 않는 조건으로 프로그램을 몇 번 실행하면 처음에는 선의 굵기가 1로 되다 윈도우즈 전체 화면이 동작하지 않습니다. 오브젝트를 저장할 공간이 부족하게 되어 윈도우즈 화면이 제대로 그려지지 않는 것으로 알고 있습니다. 하지만 이 외에도 이유가 더 있을 것 같습니다. - 그런 추측을 하게 된 것이 프로그램을 종료한 후 다시 실행하면 처음은 정상과 똑같은 결과를 보이기 때문입니다.
이부분은 XP환경에서 가상메모리를 사용했다고 생각이 들지만 - 리소스나 메모리 저장 방법에 대해 아는 것이 없어 더 깊이 알 수 없습니다.(이런 부분을 공부하려면 컴퓨터 구조를 봐야 할까요? - 개인적으로 볼 수 있는 책도 추천 부탁드립니다.)
마지막으로 오브젝트를 해제, 삭제한 경우와, 오브젝트를 해제만 하고 삭제하지 않은 경우를 비교한다면 후자쪽이 더 심각하다고 할 수 있는 결과를 보입니다. 그 전 상황에서는 굵기 1인 임의 색상의 선이 출력되다 화면이 깨지지만, 해제하지 않은 상황에서는 7~8번 이상 실행하게 되면 색상도 검은 색으로만 나오다 화면이 깨지게 됩니다.
오브젝트 해제하지 않는 경우 이전 값으로 복구하지 않는 성격 외에 또 다른 작업이 있는 것 같은데 그것이 위 결과와 무슨 관련이 있는지 궁금합니다.
+ 프로그램의 소스와, 실행시켰을 때 상태를 사진으로 찍어 제 블로그에 올렸습니다.
http://bartsesang.tistory.com/294
첨부 | 파일 크기 |
---|---|
OldObject.txt | 4.22 KB |
XP에서
XP에서 리소스 보기는 작업 관리자라면 관리자에서 핸들 열을 추가해서 보는 방법과 성능 모니터링에서 리소스 핸들을 보는 방법 있습니다. Vista라면 작업 관리자에서 리로스 모니터를 통해서 보시면 됩니다.
프로그램을 종료하게 되면 다시 되돌아오는 것은 NT 커널이 각 어플리케이션의 메모리를 보호하고 종료시 이 메모리를 운영체제에게 전부 되돌려 주기 때문입니다. MS-DOS/Windows 9x 계열에서는 어플리케이션 메모리 보호가 잘 이루어지지 않았기 때문에 메모리 누수로 인한 운영체제가 뻗는 경우가 종종 있었습니다만.
윈도 NT 커널에서는 각 어플리케이션은 4기가 까지의 선형 가상 메모리를 할당을 받고 어플리케이션이 종료 될 경우 이 가상 메모리 페이지 자체를 해제하기 때문에 리소스가 해제 되지 않았다고 하더라도 되돌아 옵니다.
성능 모니터링으로 GDI 객체 핸들 수를 이용하여 모니터링 해보시면 쉽게 확인 해보실 수 있습니다.
댓글 달기