study blog

메모리 구조 - Code/Data/Stack/Heap 영역 본문

IT 기초

메모리 구조 - Code/Data/Stack/Heap 영역

ivo_lee 2021. 4. 19. 15:27

메모리 구조

 

프로그램을 실행시키면 운영체제는 실행된 프로그램을 위해 메모리 공간을 할당해준다. 

할당되는 메모리 공간은 다음과 같은 영역으로 나누어진다. 

 

1. 코드(code)영역

2. 데이터(Data) 영역

3. 스택(Stack) 영역

4. 힙(Heap) 영역

 

- 할당 시기: 프로그램이 실행될 때마다

- 할당 장소: 메인 메모리(RAM)

- 할당 용도: 프로그램 실행 시 필요한 메모리 공간(지역변수, 전역변수 선언을 위해) 할당

 

 


코드(code) 영역

실행할 프로그램의 코드가 저장되는 영역

프로그래머가 작성한 코드가 실행되는 영역

 

데이터(data) 영역

프로그램의 전역 변수와 정적 변수가 저장되는 영역 

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

 

힙(heap) 영역

사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 영역

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

 

스택(stack) 영역

함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역

함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 

이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임이라고 한다. 

스택 영역은 높은 주소에서 낮은 주소로 메모리 주소가 할당된다. 

메모리 관리에 신경 쓸 필요가 없다는 장점을 갖지만(운영체제가 할당, 반환처리), 크기에 제약이 있다는 단점이 있다. 

 


 

stack 

LIFO(Last In First Out) 구조

가장 먼저 들어간 데이터는 가장 마지막에 나온다. 

 

heap

최댓값 및 최솟값을 찾는 연산을 빠르게 하기 위해 고안된 완전이진트리를 기본으로 한 자료구조

힙의 종류

1) 최대 힙: 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰 힙

2) 최소 힙: 부모 노드의 키 값이 자식 노드의 키 값보다 항상 작은 힙

형제 사이에는 대소관계가 정해지지 않는다. 

대부분의 경우 자식노드의 개수가 2개인 이진 힙(binary heap)을 사용한다. 

 

 


참고 사이트

http://tcpschool.com/c/c_memory_structure

'IT 기초' 카테고리의 다른 글

[javascript] var, const, let 차이점  (0) 2021.10.24
Comments