C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[183] [강좌] Win32 의 메모리 관리
타락천사 [rain622] 8428 읽음    2001-08-22 18:08
안녕하세여.. 타락임다..^^

몬가 심리상태가 불안하면 글을 올리게 되는군여.....--;;

Win32 의 메모리 관리.

Win32  환경은 이전 버젼들과는 달리, 32 비트 플랫(flat) 메모리 모델을 사용함다. 도스 시절에 코딩을 해봤던 유저라면 다음 코드처럼 커다란 배열 선언이 컴파일 에러를 내지 않는다는 것이 얼마나 멋진 일인지 알 검미다.

int szBig[1000000];

1. 플랫 메모리 모델

16 비트의 세계에서는 주소를 세그먼트(segment):오프셋(offset) 형태로 표현했슴다. 이 방식은 커다란 메모리를 다룰때 상당히 불편했슴다. 64KB 이상의 구조체를 다루기가 상당히 번거로웠기 때문에 개발자들은 자료구조를 64KB 이하로 만드는 방법을 찾았슴다.
플랫 메모리 모델의 경우, 그러한 제한이 없슴다. 각각의 프로세스는 자신만의 4GB 주소 공간을 가짐다. 그리고 4GB 공간은 그야말로 평평한 공간이므로 플랫 메모리의 주소는 실질적인 메모리의 위치를 의미함다.

2. Win32 운영체제의 메모리 관리 방식

4GB의 메모리를 장착한 PC는 거의 없슴다. 32비트의 주소 공간은 물리적 메모리 위치를 의미하지 않슴다. Win32는 가상 메모리라는 개념을 씀다.
프로세스가 4GB의 공간을 가진다는 것은 프로세스가 실제로 4GB의 메모리를 가진다는 의미가 아니라, 4GB까지의 주소 범위를 다룰수 있는 능력이 있다는 뜻임다. 프로세스에 실제로 할당되는 메모리 양은 PC의 물리적 램의 크기와 하드 디스크의 페이지 파일(가상 메모리로 사용하는 영역) 크기에 따라 결정됨다. 운영체제는 필요에 따라 하드 디스크의 페이지 파일을 읽어서 물리적 메모리에 복사하거나, 물리적 메모리의 페이지들을 페이지 파일에 복사함다. 프로세스의 가상 주소를 실질적인 주소로 변환할 때에는 페이지 맵(page map)을 참조함다. 페이지 맵까지 들어가는 것은 너무 이론적이니, 간단히 프로세스마다 주소 테이블이 있어서 가상 주소와 실질적인 주소를 대응시켜 준다고 이해해두 충분함다.

Win32 에서는 각각의 프로세스마다 독립된 4GB의 주소 공간을 가지고 있슴다. 그 주소 공간의 상위 2GB 영역은 윈도우가 사용함다. 하위 2GB 공간은 애플리케이션이 존재하며, 애플리케이션은 그 곳에 메모리를 할당해서 사용함다. 가상 메모리를 사용하는 구조 이기 때문에 한 프로세스의 스레드는 다른 프로세스의 메모리를 사용할 수 없슴다. 한 프로세스의 메모리 주소 54545454 가 가르키는 메모리는 다른 프로세스의 메모리 주소 54545454 가 가르키는 메모리와 다릅니다.

2.1. 가상 메모리

Win32 의 VirtualXXXX() 함수들은 가상 메모리를 다루는 함수들임다. 각 함수에 대해선 온라인 도움말을 참고하시기 바람다.
Note : xxxEx() 함수들은 디버거를 만들려고 하지 않는다면 알 필요 없슴다.

2.2. 메모리 맵 파일

메모리 맵 파일(memory-mapped file : 파일 형태를 가지는 메모리 영역, file-mapping object라고도 함)이란 사용 방법은 디스크의 파일과 같지만, 실제 데이터는 메모리에 저장되는 형태의 자료 구조를 말함다. 파일의 전부 또는 일부가 호출한 프로세스의 주소 공간에 저장되는 겁니다.

2.3. 힙

힙(heap)이란, 애플리케이션이 사용하는 연속적인 메모리 블록들을 말함다. 힙을 만든 후에는 힙 안에서 더 작은 메모리 블록을 개발적으로 할당할 수 있슴다.
간단히 애플리케이션이 메모리를 할당하고 조작하는 영역이라고 생각하셔두 무방함다.


즐푸하세여.

타락천사..

+ -

관련 글 리스트
183 [강좌] Win32 의 메모리 관리 타락천사 8428 2001/08/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.