- Code Section (Text Section)
- 프로그램의 명령어들이 저장되며 프로세스 종료까지 유지되는 영역
- 프로그램 코드가 저장되며, 프로그램이 실행되면 CPU에 의해 실행
-> Compile 이후 기계어로 저장
- 읽기 전용으로 설정되어 있어 프로그램이 이 영역의 내용을 수정할 수 없다.
-> 작업이 들어오면 access violation
발생
읽기 전용일때의 장점 : 한 종류의 프로그램을 여러 번 혹은 여러 개 실행해도, 공유가 가능
- Data Section
- 초기화된 전역(global) 변수와 정적(static) 변수들이 저장되는 영역
-> 상수, 포인터 변수의 값, 배열의 값, 구조체의 값
- 프로그램의 시작과 함께 할당되며, 프로그램의 종료 시까지 유지
- BSS (Block Started by Symbol) Section
- Data Section 에 포함됨
- 초기화되지 않은 전역 변수와 정적 변수가 저장되는 영역
-> (포인터 변수,배열,구조체)의 초기값 포함
- 프로그램이 시작되면 메모리가 할당되고 초기화되지 않은 변수들은 자동으로 초기화
- Heap
- 동적으로 메모리를 할당하고 해제하는 데 사용되는 영역
- 사용자가 직접 제어하여 메모리 할당과 해제가 가능
- 메모리의 크기와 위치는 런타임에 동적으로 결정
new
, malloc
를 사용하여 힙에 메모리를 할당 delete
, free
등을 사용하여 해제
- C++의 경우에는
garbage collector
가 활동하면 자동으로 반환하는 경우도 있음
- Heap 의 크기가 작으면 Heap Overflow가 발생할 수 도 있음
- Stack
- 스택은 함수 호출과 로컬 변수들의 저장에 사용되는 영역, 완료시 소멸
- 함수가 호출될 때마다 스택 프레임이 생성되며, 해당 함수의 지역 변수와 매개변수가 저장
- 함수가 종료되면 함수의 반환 값이 Stack에 저장되며, 해당 스택 프레임이 제거
- 후입선출(LIFO) 구조
- Stack 의 크기가 작으면 Stack Overflow가 발생할 수도 있음