운영체제는 위 구조를 기반으로 프로세스에 적절한 메모리를 할당한다.
스택은 위 주소부터 할당
힙은 아래 주소부터 할당
동적 할당이 되는 영역
동적 할당: 런타임 단계에서 메모리를 할당 받는 것
스택
: 지역 변수, 매개변수, 실행되는 함수에 의해 늘어나거나 줄어드는 메모리 영역이다.
함수가 호출될 때마다 호출될 때의 환경 등 특정 정보가 스택에 계속해서 저장된다.
재귀함수가 호출된다고 했을 때새로운 스택 프레임이 매번 사용되기 때문에 함수 내의 변수 집합이 해당 함수의 다른 인스턴스 변수를 방해하지 않는다.
힙
: 동적으로 할당되는 변수들을 담는다.
malloc(), free() 함수를 통해 관리할 수 있다.
동적으로 관리되는 자료 구조의 경우 힙 영역을 사용한다.
(예 - vector는 내부적으로 힙 영역을 사용)
정적 할당이 되는 영역
정적 할당: 컴파일 단계에서 메모리를 할당하는 것
데이터 영역
: BSS segment, Data segment, code/text segment로 나뉘어서 저장된다.
- BSS segment: 전역 변수 또는 static, const로 선언되어 있고
0으로 초기화 또는 초기화가 어떠한 값으로도 되어 있지 않은 변수들이 메모리 영역에 할당된다.- Data segment: 전역 변수 또는 static, const로 선언되어 있고
0이 아닌 값으로 초기화된 변수가 메모리영역에 할당된다.- code segment: 프로그램의 코드가 들어가는 메모리 영역이다.