프로세스의 메모리 구조

- 스택은 위 주소부터 할당, 힙은 아래 주소부터 할당
스택
- 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정
- 하지만 함수가 함수를 호출하는 등에 따라 런타임시에도 크기 변경 가능
- 동적 할당
힙
- 힙은 동적 할당할 때 사용되며 런타임 시 크기가 결정
- 동적 할당
데이터 영역
- BSS 영역과 Data 영역으로 나뉘고 정적 할당에 관한 부분 담당
- 정적 할당
코드영역
정적 할당
- 컴파일 단계에서 메모리를 할당하는 것
- BSS 영역은 전역변수, static, const로 선언되어 있는 변수 중 0으로 초기화 또는 초기화가 되어 잇지 않은 변수들이 할당됨
- Data 영역은 전역변수, static, const로 선언되어 있는 변수 중 0이 아닌 값으로 초기화된 변수들이 할당됨
- Code, Text 영역은 프로그램의 코드가 저장됨
동적 할당
- 런타임 단계에서 메모리를 할당받는 것
- Stack은 지역변수, 매개변수, 실행되는 함수에 의해 늘어나거나 줄어드는 메모리 영역. 함수 호출 마다 호출 환경 등의 정보가 계속해서 저장됨
- 재귀 함수 같은 경우 새로운 스택 프레임이 매번 사용되기 때문에 함수 내의 변수 집합이 다른 인스턴스 변수를 방해하지 않음
- Heap은 동적으로 할당되는 변수 저장. malloc, free 등을 통해 관리 가능하며 동적으로 관리 되는 자료구조가 사용