메모리 구조


메모리의 구조


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

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

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

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


영역
코드(텍스트) 영역
데이터 영역
스택 영역
힙 영역


코드(텍스트) 영역


텍스트 영역은 아주 쉽게 말하면 코드를 실행하기 위해 저장되어 있는 영역이다.

흔히 코드 영역이라고도 하는데, 프로그램을 실행시키기 위해 구성되는 것들이 저장되는

영역이다. 한마디로 명령문들이 저장되는 것인데, 제어문, 함수, 상수들이 이 영역에

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


데이터 영역


데이터 영역은 우리가 작성한 코드에서 전역변수, 정적변수 등이 저장되는 공간이다.

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

좀 더 구체적으로 들어가자면 데이터 영역도 크게 두 가지로 나뉜다.

초기화 된 변수 영역과 초기화 되지 않은 변수 영역으로 나뉜다. 그리고 그 중 초기화되지

않은 변수 영역은 BSS(Block Started by Symbol) 이라고도 한다.


스택 영역


스택 영역은 함수를 호출할 때 지역변수, 매개변수들이 저장되는 공간이다. main함수 안에서의

변수들도 당연 이에 포함된다. 그리고 함수가 종료되면 해당 함수에 할당된 변수들을 메모리에서

해제시킨다. 한마디로 Stack 자료구조의 pop과 같은 기능을 하는 것이다.

추가적으로 Stack 영역은 Heap영역과 반대로 높은 주소에서 낮은 주소로 메모리에 할당된다.


특징
원시타입의 데이터가 값과 저장
Heap 영역에 생성된 Object 타입의 데이터의 참조값이 저장
함수가 호출될 때 사용하는 메모리
기능 수행이 끝나면 자동으로 반환되는 메모리


힙 영역


Heap 영역은 쉽게 말해서 ‘사용자에 의해 관리되는 영역’이다. 흔히 동적으로 할당 할 변수들이

여기에 저장된다고 보면 된다. 그래서 동적 할당 영역이라고도 한다.

참조형(Reference Type)의 데이터 타입을 갖는 객체, 배열 등은 Heap 영역에 데이터가 저장된다.

정리하자면 Heap 영역은 참조형의 데이터 객체의 실제 데이터들이 담기는 공간이고,

실제 데이터를 가지고 있는 Heap 영역의 참조값을 Stack 영역의 객체가 가지고 있는 것이다.

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


특징
Object 타입의 데이터가 저장
애플리케이션의 모든 메모리 중 stack을 제외한 부분
자동으로 관리되지 않는 메모리 영역


참고 문서


• 📚 TCP-SCHOOL

• 📚 관련 유튜브 영상

• 📚 관련 블로그1

• 📚 관련 블로그2