반응형
프로그램을 실행시키면, 운영체제는 프로그램을 위해 메모리 공간을 할당해준다.
프로그램이 운영체제로부터 할당받는 메모리 공간은 총 4개 영역으로 구분할 수 있다.
- 코드(Code) 영역
- 데이터(Data) 영역
- 힙(Heap) 영역
- 스택(Stack) 영역
코드(Code) 영역
- 코드 영역에는 실행할 프로그램의 코드와 매크로 상수가 기계어 형태로 저장된다.
- 다른 이름으로 텍스트(Text) 영역이라고도 부른다.
- CPU는 코드 영역에 저장된 명령어를 하나씩 가져가 처리한다.
- 컴파일 타임에 결정되고, 중간에 변경이 불가능하도록 Read-Only로 되어있다.
- 프로그램 시작부터 종료까지 메모리에 남는다.
데이터(Data) 영역
- 프로그램의 전역변수와 정적 변수(static변수 등)가 저장되는 공간이다.
- 프로그램 시작과 동시에 메모리에 할당되고, 종료시에 메모리에서 소멸한다.
힙(Heap) 영역
- 프로그래머가 직접 공간을 할당, 해제하는 동적 메모리 공간이다.
- 런타임 시에 결정되며, malloc 또는 new 등으로 메모리를 할당하고, calloc 또는 free 등으로 메모리를 해제한다.
- 메모리의 낮은 주소에서 높은 주소 방향으로 할당되며 선입선출(FIFO) 구조를 가지고 있다.
- 사용 후 메모리 해제를 하지 않으면 메모리 누수(memory leak)가 발생한다.
스택(Stack) 영역
- 함수 내에 선언된 지역변수, 매개변수, 리턴 값, 함수 호출 시 이전 함수의 주소 등이 저장된다.
- 함수 호출 시 생성되고, 함수 종료 시 소멸한다.
- 메모리의 높은 주소에서 낮은 주소 방향으로 할당되며 후입선출(LIFO)구조를 가지고 있다.
- 컴파일 시에 크기가 결정되며, 크기가 stack영역을 초과하면 stack overflow가 발생한다.
반응형
'Computer Science' 카테고리의 다른 글
해시맵(HashMap) (0) | 2022.02.01 |
---|---|
[알고리즘/정렬] 선택, 버블, 삽입, 병합, 퀵, 힙 (0) | 2022.01.16 |
[자료구조] 트리(Tree) (0) | 2022.01.13 |
동기(Synchronous)와 비동기(Asynchronous) (0) | 2022.01.11 |
JSON이란? (0) | 2022.01.10 |