프로그램이 실행되기 위해서는 우선 프로그램이 메모리에 로드 되어야 한다.
뿐만 아니라 프로그램에 선언된 변수들을 저장할 메모리도 필요하다.
따라서 컴퓨터에 설치된 OS(운영체제)는 프로그램의 실행을 위해 다양한 메모리를 제공하고 있으며,
운영체제로부터 프로그램이 할당받는 메모리는 크게 네가지로 구분한다.
1) 코드 영역
2) 데이터 영역
3) 스택 영역
4) 힙 영역
코드(Code) 영역
코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역이다. 텍스트(code) 영역이라고도 부른다.
CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다.
개발자가 작성하는 코드라고 생각하면 쉽다. 함수나 제어문, 상수 등이 이에 포함될 수 있다.
데이터(Data) 영역
데이터 영역은 전역변수와 정적(static) 변수가 저장되는 영역이다.
프로그램의 시작과 함께 할당되고, 프로그램을 종료하면 소멸되는 메모리 영역이다.
public class Main {
static String helloWorld = "hello world";
public static void main(String[] args) {
System.out.println(helloWorld);
}
}
힙(Heap) 영역
힙 영역은 개발자가 직접 공간을 할당 / 해제하는 메모리 영역이다.
낮은 주소의 메모리에서 높은 주소의 메모리 방향으로 동적 할당(Dynamic Memory Allocation)된다.
낮은 주소 영역에서 높은 주소 영역 방향으로 자료가 쌓이게 되며, FIFO(First In First Out) 구조이다.
Java에서는 가비지 컬렉터(Garbage Collector)가 자동으로 해제한다.
클래스와 클로저가 이에 해당한다.
스택(Stack) 영역
프로그램이 자동으로 사용하는 임시 메모리 영역이다.
함수 호출시 생성되는 지역변수와 매개변수가 저장된다. 함수 호출이 완료되면 사라진다.
이 때 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)이라고 부른다.
스택 영역에는 push로 데이터를 삽입하고 pop으로 빼낼 수 있다.
높은 메모리 영역에서 낮은 메모리 영역 방향으로 할당되며, LIFO(Last In First Out) 형태로 가장 늦게 들어간 데이터가 가장 먼저 나오게 된다.
그림으로 보면 아래에서부터 차곡차곡 쌓인 데이터가 맨 윗단부터 나간다고 생각하면 된다.
'Study > Algorithm 이론' 카테고리의 다른 글
배열에서의 정렬 (0) | 2022.04.09 |
---|---|
[자료구조] 해시 테이블(Hash Table) (0) | 2022.02.18 |
[자료구조] 배열(Array)과 연결 리스트(Linked List) (0) | 2022.02.17 |
[자료구조] 스택(Stack)과 큐(Queue) (3) | 2022.02.17 |