[API]GDI 오브젝트 해제, 삭제를 하지 않을 경우 리소스와 연관성이 궁금합니다.

bartsesang의 이미지

지금 윈도우즈 API 정복을 보고 있습니다. 이 책의 예제 중 하나(p167)가 GDI 오브젝트를 해제하지 않을 때 시스템이 어떤 상태로 되는지 살펴보는 것입니다.

삭제를 하지 않는 조건으로 프로그램을 몇 번 실행하면 처음에는 선의 굵기가 1로 되다 윈도우즈 전체 화면이 동작하지 않습니다. 오브젝트를 저장할 공간이 부족하게 되어 윈도우즈 화면이 제대로 그려지지 않는 것으로 알고 있습니다. 하지만 이 외에도 이유가 더 있을 것 같습니다. - 그런 추측을 하게 된 것이 프로그램을 종료한 후 다시 실행하면 처음은 정상과 똑같은 결과를 보이기 때문입니다.

이부분은 XP환경에서 가상메모리를 사용했다고 생각이 들지만 - 리소스나 메모리 저장 방법에 대해 아는 것이 없어 더 깊이 알 수 없습니다.(이런 부분을 공부하려면 컴퓨터 구조를 봐야 할까요? - 개인적으로 볼 수 있는 책도 추천 부탁드립니다.)

마지막으로 오브젝트를 해제, 삭제한 경우와, 오브젝트를 해제만 하고 삭제하지 않은 경우를 비교한다면 후자쪽이 더 심각하다고 할 수 있는 결과를 보입니다. 그 전 상황에서는 굵기 1인 임의 색상의 선이 출력되다 화면이 깨지지만, 해제하지 않은 상황에서는 7~8번 이상 실행하게 되면 색상도 검은 색으로만 나오다 화면이 깨지게 됩니다.

오브젝트 해제하지 않는 경우 이전 값으로 복구하지 않는 성격 외에 또 다른 작업이 있는 것 같은데 그것이 위 결과와 무슨 관련이 있는지 궁금합니다.

+ 프로그램의 소스와, 실행시켰을 때 상태를 사진으로 찍어 제 블로그에 올렸습니다.
http://bartsesang.tistory.com/294

File attachments: 
첨부파일 크기
Plain text icon OldObject.txt4.22 KB
vishnu76의 이미지

XP에서 리소스 보기는 작업 관리자라면 관리자에서 핸들 열을 추가해서 보는 방법과 성능 모니터링에서 리소스 핸들을 보는 방법 있습니다. Vista라면 작업 관리자에서 리로스 모니터를 통해서 보시면 됩니다.

프로그램을 종료하게 되면 다시 되돌아오는 것은 NT 커널이 각 어플리케이션의 메모리를 보호하고 종료시 이 메모리를 운영체제에게 전부 되돌려 주기 때문입니다. MS-DOS/Windows 9x 계열에서는 어플리케이션 메모리 보호가 잘 이루어지지 않았기 때문에 메모리 누수로 인한 운영체제가 뻗는 경우가 종종 있었습니다만.

윈도 NT 커널에서는 각 어플리케이션은 4기가 까지의 선형 가상 메모리를 할당을 받고 어플리케이션이 종료 될 경우 이 가상 메모리 페이지 자체를 해제하기 때문에 리소스가 해제 되지 않았다고 하더라도 되돌아 옵니다.

성능 모니터링으로 GDI 객체 핸들 수를 이용하여 모니터링 해보시면 쉽게 확인 해보실 수 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.