메모리의 구조
컴퓨터 구조

메모리의 구조

메모리의 구조

프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 한다.

또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요한다.

 

따라서 컴퓨터의 운영체제(OS)는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있다.

프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 다음과 같다.

 

1. 코드(code) 영역

2. 데이터(data) 영역

3. 스택(stack) 영역

4. 힙(heap) 영역

 

다음 그림은 운영체제가 제공하는 메모리 공간을 표현하고 있다.

 

메모리는 크게 4가지 영역으로 되어있다


코드(code) 영역

우리가 작성한 소스코드가 들어 가는 부분. 즉, 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code)영역이라고도 부른다.
코드영역은 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 여기에 지정된다.

CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.


데이터(data) 영역

메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다.

데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.

int number = 1; //데이터 영역의 할당
int number1 = 2; //데이터 영역의 할당

 

스택(stack) 영역

메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.

스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.

이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다.

 

스택 프레임에 대한 더 자세한 사항은 C언어 스택 프레임 수업에서 확인할 수 있다.

 

스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출한다.

이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출된다.

스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.

프로그램이 자동으로 사용하는 임시 메모리 영역이다.
함수 호출 시 생성되는 지역 변수와 매개변수가 저장되는 영역이고,
함수 호출이 완료되면 사라집니다.

 


힙(heap) 영역

메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 '그리고 해야만 하는' 메모리 영역이다.

힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.

힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

프로그래머가 할당/해제하는 메모리 공간이다.
c#, 파이썬, 자바에서는 가비지 컬렉터가 자동으로 해제한다 (신경쓸필요없음).

그치만 c++에서는 프로그래머 직접 할당 해제를 해야한다.
이 공간에 메모리 할당하는 것을 동적 할당(Dynamic Memory Allocation)이라고도 부른다.

예를 들어 클래스, 클로저가 이 부분에 해당 된다.
런타임 시에 크기가 결정된다.