Windows 32bit OS환경
◆ Stack(스택) : 컴파일러가 임시로 사용하는 곳으로, C언어에서 함수 호출시 지역 변수(malloc을 사용하지 않고 직접 정의된 경우)와 인수, 반환 주소(return address) 등을 Push(저장)한다. 함수가 끝나면 이 값들을 Pop하고 Return 하게 되는 것이다.
◆ Heap(힙) : 프로그램 수행 중에 malloc(), free() 등의 시스템 콜로 할당되고 해제되는 메모리 영역으로, 프로그래머가 직접 사용할 수 있는 곳이다.
◆ Data (Data segment): C언어에서 전역 변수, 정적 변수(static으로 지정된 변수) 등으로 선언된 변수 영역이다.
-> bss(uninitialized data segment) : global, static 등의 변수가 초기화 되지 않은 경우의 변수의 영역
-> initialized data segment : global, static 등의 변수가 초기화 된 경우의 변수의 영역
◆ Text(Compiled code) : 간단히 말해서 프로그램의 내용이 저장되는 곳으로, 프로그램의 실행 코드인 기계어 코드와 읽기 전용 데이터 등이 이 영역에 들어있다.(CPU가 읽어들여 수행한다고 해서 Text 라고 부르며 Code 영역이라고도 한다.)
★ bss segment 와 data segment의 차이
bss : RAM에 해당 영역만큼의 공간만을 잡아준다
data segment : RAM을 할당할 뿐만 아니라 해당데이터의 초기 값을 지니고 있을 ROM또한 할당되어야 한다.
따라서, bss영역은 초기화 과정에서 컴파일러에서 지정한 초기화 방식에 의하여 초기화되며, data부분은 ROM에 있는 초기화된 데이터를 해당 data영역으로 복사함으로서 수행하게 된다.
0x80000000 을 기준으로 그 이상의 주소는 Kernal level 그 이하의 주소는 User level이다.
★ 그럼 만약 장착된 RAM이 2기가밖에 안 되는 컴퓨터에선 메모리 지도도 달라지나요?'
그렇지는 않습니다. 현대의 운영체제(OS)들은 "가상 메모리"라고 불리는 메모리 관리
방식을 사용하고 있는데, 이를 이용하면 실제 가지고 있는 RAM 크기보다 더 많은 메모리를
사용할 수 있게 됩니다. 그 원리를 간단하게 설명하자면, 현 시점에 바로 사용되지
않는 메모리 영역은 용량이 넉넉한 하드디스크에 임시로 보관해 놓는 것입니다.
그래서 실제 소유하고 있는 메모리 용량보다 훨씬 더 큰 가상 메모리를 확보할 수 있게 됩니다.
'Programming > C' 카테고리의 다른 글
gotoxy 함수 구현 및 방향키 값 (0) | 2012.07.25 |
---|---|
C Study 02 - 연산자 (0) | 2012.05.18 |
C Study 01 - 기초 2 (3) | 2012.05.02 |
C Study 01 - 기초 1 (0) | 2012.05.02 |
Compile 과정 (0) | 2012.05.01 |