자유롭게 게시물을 올릴수있는 게시판입니다.
  • 유년추억
  • 학교생활
  • 입시준비
  • 대학생활
  • 군생활
  • 알바생활
  • 취업준비
  • 직장생활
  • 원룸생활
  • 연애중
  • 결혼준비
  • 집안살림
  • 자녀교육
  • 창업준비
  • 이민유학
  • 노후생활
  • 전체보기


[강좌] 윈도우 리소스란 무었인가?

 
[강좌] 윈도우 리소스란 무었인가?

가끔 리소스 부족 에러로 프로그램이 다운 되는 적이 있었을 것입니다.
여기 저기 PC잡지들 보면 리소스를 아껴라 뭐 이야기를 많이 하는데 아무도 리소스가 정확히 뭔지는 전혀 언급이 없더군요.. 그리고 왜 윈NT에서는 리소스 문제가 생기지 않는지에 대해서도 그냥 NT는 그렇게 디자인 되었다.. 그정도뿐이고..그렇다고 NT에는 리소스의 개념이 없는 것도 아니고..

그럼 리소란 무었일까..
윈도우에서 말하는 리소스라는 놈은 정확히 말해 윈도우의 중요 API모듈(GDI, USER등)이 사용하는 로컬힙의 사이즈를 이야기 합니다. 이놈이 16비트 윈도우때 부터 존재하던 것인데 이것의 사이즈가 작기 때문에 리소스 부족에러가 발생 하는 것입니다.
기본적으로 윈도우3.1에서는 64KB의 메모리 힙밖에 쓰질 못했습니다(16비트 메모리 주소) 그러다가 윈95가 되면서 당연히 32bit 주소 체계가 되었으니까 좀 나아 져야 되는데 이때 나아진 32비트 힙의 사이즈가 아쉽게도 2MB밖에 안됩니다. 정확하게 알아 보면 윈도우95계열(98, ME)가 사용할 수 있는 리소스는 기존의 16비트 힙과 추가된 32비트 힙을 합쳐서 다음과 같습니다.

16 bit User Heap : 64K
32 bit User Window Heap : 2M
32 bit User menu Heap : 2M
16 bit GDI Heap (64K)
32 bit GDI Heap (2M)

우리가 리소스 모니터로 봤을때 사용자 리소스라는 놈이 User 라는 놈이고 그래픽 리소스가 바로 GDI 힙의 사용량을 보여 주는 것입니다. 이거는 GetFreeSystemResource 라는 윈도우 API를 호출해서 알 수 있습니다. 위에 적은 힙은 무었인가? 이것은 User32.dll, User.exe, GDI32.dll, GDI.exe 가 사용하는 로컬힙입니다. 힙은 글로벌 힙과 로컬힙이 있는데 둘다 프로그램 내에서 메모리를 할당하기 위해 사용하는 놈입니다.
실제로 프로그램내에서 GDI객체를 생성하면 그 객체의 정보는 로컬힙에 저장이 되고 실제 객체가 로딩되는 메모리의 위치는 글로벌 힙입니다.
그런데 이 로컬힙과 글로벌 힙을 할당하기 위한 함수들의 처리 방식이 윈도우95 계열과 윈도우NT(2000 모든 버전 포함)계열이 다른 겁니다. 즉 윈95계열은 시스템 DLL들이 사용하는 로컬 힙이 고정되어 있는 반면에
윈도우 NT계열은 시스템 DLL이나 일반 프로그램이나 상관없이 로컬힙과 글로벌힙을 둘다 가상메모리 공간(4G까지 할당 가능)을 사용하기 때문에 아무리 프로그램을 많이 실행해서 GDI, USER가 로컬힙을 사용하더라도 리소스 부족이 일어 나지 않는 것입니다.
(윈95계열에서 시스템 객체(User, GDI등이 사용하는)를 제외하고 일반적으로 프로그래에서 사용하는 LocalHeap과 GlobalHeap은 둘다 Virtual Memory를 사용하기 때문에 프로그램 내에서 LocalAlloc 함수를 사용한다고 리소스가 줄지는 않습니다.- 아마 그럴겁니다.(헉..))
실제 GetFreeSystemResource 함수를 실행해 보면 NT계열에서는 항상 90% 이상이 나옵니다.




written by (mushu)
2002-07-07 13:30:58
909 번 읽음
☞ 로그인 후 의견을 남기실 수 있습니다
 캐시선물





365ch.com 128bit Valid HTML 4.01 Transitional and Valid CSS!
태그