이번에는 메모리의 구조에 대해 설명드리겠습니다.
우선, 우리가 바탕화면에서 더블클릭을 하면 프로그램이 실행되는데
이 때 프로그램이 실행되기 위해서는 해당 프로그램이 메모리에 로드(Load) 되어야 합니다.
그 후 프로그램이 실행되는 동안 프로그램내의 코드들과 명령어를 처리하기 위해서는
해당 코드와 명령어를 저장할 메모리가 필요합니다.
따라서 운영체제(OS) 는 프로그램의 실행을 위해 다양한 메모리 공간을 제공합니다.
운영체제가 제공하는 대표적인 메모리 공간은 아래 4가지 영역 입니다.
1. 코드(Code)
2. 데이터(Data)
3. 힙(Heap)
4. 스택(Stack)
1. 코드(Code)영역
말 그대로 코드가 저장되는 영역입니다.
텍스트(Text)영역이라고도 하며 실행할 프로그램의 코드가 저장됩니다.
프로그램이 시작되고 종료될 때까지 메모리에 남아있게 됩니다.
2. 데이터(Data)영역
전역변수와 정적(Static) 변수가 있는 영역입니다.
프로그램의 시작과 끝을 함께한다고 생각하면 되는데
프로그램이 시작되면 할당되었다가, 프로그램이 종료되면 같이 없어지는 영역입니다.
3. 힙(Heap)영역
사용자가 관리하며 사용자에 의해 동적할당되는 영역입니다.
즉, 상수선언이 되는 부분이 아니라 사용자 (프로그래머)가 직접 힙 영역을 할당하고 해제하는 메모리 공간입니다.
힙 영역은 선입선출(FIFO) 방식으로 먼저 들어온 데이터가 먼저 나가는 형식입니다.
4. 스택(Stack)영역
함수의 호출시 생성되는 부분입니다.
함수 호출 시 지역변수와 매개변수가 저장되며, 함수 호출이 완료되면 같이 없어집니다.
스택 영역은 후입선출(FIFO)의 방식으로 가장 나중에 들어온 데이터가 가장 먼저 인출됩니다.
그림으로 나타내면 아래와 같습니다.
< 스택과 힙의 장단점 >
스택 | 힙 | |
특징 | 빠른 Access 지역 변수 메모리 크기 제한 |
느린 Access 전역 변수 메모리 크기 제한 없음 |
'IT 이것저것' 카테고리의 다른 글
[메모리] 동적할당과 정적할당 특징 비교 (2) | 2023.01.15 |
---|---|
[Java] 가비지컬렉션(Garbage Collection, GC) 이란? (3) | 2023.01.13 |
[언박싱] 한성컴퓨터 언더케이지 TFX4470HW 르누아르 14인치 노트북 후기 (1) | 2023.01.12 |
[티스토리]코드블럭 테마 및 폰트변경 완벽가이드 (3) | 2023.01.10 |
[오라클에러] ORA-01062:버퍼정의를 위해 메모리 할당할 수 없음 (2) | 2023.01.09 |
댓글