4 가상 주소 공간
프로그램을 더블클릭해 실행하면 하드디스크에 있던 프로그램이 메인 메모리에 올라오면서 프로세스가 생성되고(프로세스는 10장에서 배웁니다), 32비트 운영체제라면 실행되는 순간 4GB 메모리를 할당받습니다. 이 메모리가 메인 메모리의 실제 4GB는 아니지만, 프로세서는 실제로 운영체제에게 4GB를 할당받은 것처럼 사용하면 됩니다. 이번 절에서는 프로세스가 실행될 때 할당되는 4GB에 관해 이야기하겠습니다.
할당받은 4GB 중 2GB는 운영체제가 담당하는데 이를 커널 영역이라고 합니다. 나머지 2GB는 실제 프로그램이 담당하는데 이를 유저 영역이라고 합니다. 유저 영역은 다시 코드(Code), 데이터(Data), 스택(Stack), 힙(Heap) 세그먼트로 나뉩니다. 그림 9-2를 볼까요?
그림 9-2 가상 주소 공간(virtual address space)
그림 9-2를 보면 가장 낮은 주소(0x00000000)부터 가장 높은 주소(0x7FFFFFFF)까지 코드, 데이터, 힙, 스택 세그먼트의 순서로 위치합니다. 가장 높은 주소 0x7FFFFFFF는 10진수로 2,147,483,647 즉, 2GB입니다. 그림을 보면 힙 세그먼트에는 아래로 향하는 화살표가 있고, 스택 세그먼트에는 위로 향하는 화살표가 있습니다. 이 화살표는 각 세그먼트가 확장하는 방향을 나타냅니다.