본문 바로가기

Study/Algorithm 이론

메모리의 구조

프로그램이 실행되기 위해서는 우선 프로그램이 메모리에 로드 되어야 한다.

뿐만 아니라 프로그램에 선언된 변수들을 저장할 메모리도 필요하다.

 

따라서 컴퓨터에 설치된 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) 형태로 가장 늦게 들어간 데이터가 가장 먼저 나오게 된다.

 

그림으로 보면 아래에서부터 차곡차곡 쌓인 데이터가 맨 윗단부터 나간다고 생각하면 된다.

 

 

 

 

 

 

 

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

메모리의 구조 (코드, 데이터, 힙, 스택 영역)

목차 메모리 코드(code) 영역 데이터(data) 영역 힙(heap) 영역 스택(stack) 영역 오버 플로우 메모리 위 그림과 같이, 프로그램이 실행되기 위해서는 운영체제(OS)가 프로그램의 정보를 메모리에 로드

all-young.tistory.com

 

 

[컴퓨터 기초] 메모리구조(Memory Structure) - jinShine

프로그램 실행 순서 메모리 영역에 관해 이야기하기 전에 어떤식으로 프러그램이 실행되는지 과정을 살펴 보겠습니다. 프로그램의 정보를 읽어 메모리에 로드되는 과정을 보실 수 있으실텐데,

jinshine.github.io