# 프로세스 메모리 구조

<figure><img src="https://2804243633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfV6clXG953LqFieNgWUf%2Fuploads%2F2yWW0Wm88y2atlIvSuLv%2Fimage.png?alt=media&#x26;token=6d10ad54-9f0a-43dc-a516-74dbe630e6e2" alt=""><figcaption></figcaption></figure>

**스택과 힙**

스택과 힙은 동적 할당이 되며, 동적 할당은 런타임 단계에서 메모리를 할당받는 것을 말합니다.

* 스택은 지역 변수, 매개변수, 실행되는 함수에 의해 늘어들거나 줄어드는 메모리 영역입니다. 함수가 호출될 때마다 호출될 때의 환경 등 특정 정보가 스택에 계속해서 저장됩니다. 또한, 재귀 함수가 호출된다고 했을 때 새로운 스택 프레임이 매번 사용되기 때문에 함수 내의 변수 집합이 해당 함수의 다른 인스턴스 변수를 방해하지 않습니다.
* 힙은 동적으로 할당되는 변수들을 담습니다. malloc(), free() 함수를 통해 관리할 수 있으며 동적으로 관리되는 자료 구조의 경우 힙 영역을 사용합니다. 예를 들어 vector는 내부적으로 힙 영역을 사용합니다.

**데이터 영역과 코드 영역**

이 영역은 정적 할당되는 영역입니다. 정적 할당은 컴파일 단계에서 메모리를 할당하는 것을 말합니다. 데이터 영역은 BSS segment와 Data segment, code/text segment로 나뉘어서 저장됩니다.

BSS segment는 전역 변수 또는 static, const로 선언되어 있고 0으로 초기화 또는 초기화가 어떠한 값으로도 되어 있지 않은 변수들이 이 메모리 영역에 할당되며 Data segment은 전역 변수 또는 static, const 로 선언되어 있고 0이 아닌 값으로 초기화된 변수가 이 메모리 영역에 할당됩니다.

code segment는 프로그램의 코드가 들어갑니다.
