프로세스 메모리 구조

C_MemMap_Exam_VS.png

프로그램 코드는 Text 영역에 잡히고 전역변수는 Data 영역에 잡힌다.  이 두개의 영역의 메모리 크기는 컴파일 시점에 결정해서 프로세스 동작 중에는 크기가 변하지 않는다.

그런데 함수 호출에 의한 지역 변수나 호출 처리에 필요한 메모리는 런 타임 (프로세스 동작 시) 에 잡힌다.

피 호출 함수가 끝나면 호출한 함수로 복귀하고 자신의 메모리를 해제하기 위해 stack 에 잡힌다.

이 외에 앞으로 배울 동적 메모리 할당 함수 호출하면 Heap 메모리에 잡힌다.

 

Text 메모리에는 프로그램에서 수행할 코드가 로딩되는 메모리 영역으로 변하지 않는 부분이다.

Data 메모리와 BSS 메모리는 전역 변수(함수 외부에 선언한 변수로 프로그램 전테영역에서 사용 가능) 와 정적변수 (static 키워드를 명시하여 선언한 변수)를 위한 영역이다.

Data 메모리는 초기값을 설정한 전역변수와 정적 변수를 위한 영역이다.

Bss 메모리는 초기값을 설정하지 않은 전역 변수와 정적 변수를 위한 영역으로 0으로 자동 초기화해 준다.

Stack 메모리는 지역 변수와 프로그램 수행 흐름을 위한 데이터를 임시로 저장하는 영역이다.

Heap 메모리는 프로그램 동작 중에 동적으로 메모리를 할당하여 사용할 수 있는 영역이다.

따라서 Text, Data , Bss 영역은 프로그램 로딩할 때 크기를 결정하며 수행 중간에 크기 변화가 없다. 하지만 Stack 과 Heap 영역은 프로그램 수행 중에 메모리 크기가 변한다.

 

댓글 남기기