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