1. Text 영역(Code 영역)
- 작성한 코드들이 컴파일 이후 기계어로 번역되어 저장되어 있는 공간
- 프로그램이 끝날때까지 메모리에 남아있음
- 읽기 전용 공간
2. Rodata 영역
- Read Only data, 즉 읽기 전용 data들이 저장되는 공간
- const 변수, 문자열 상수, printf의 중괄호 부분이 주로 들어감
3. Data 영역
- 전역 변수, 전역 배열, 전역 구조체 등을 저장하는 공간
- 정적 변수(static)도 저장
- 초기화 한 이후의 전역변수를 저장
4. Bss 영역
- Data와 매우 비슷
- 전역 변수(배열, 구조체 포함), 정적 변수 저장
- 초기화 이전의 전역변수를 저장(차이점)
cf) 전역변수들은 main이 실행되기 전에 bss에 저장되며, bss 영역에 있던 전역변수는 main이 실행되기 전, 전부 0으로 초기화되어 data 영역으로 들어간다. 여러프로그램을 다루는 경우, main 실행 전의 메모리를 아껴야 하므로 bss가 중요함
5. Heap 영역
- 동적으로 메모리가 할당되는 공간
- 낮은 주소에서 높은 주소로 할당되며, 사용자가 직접 할당 및 해제를 해주어야 함
- 스택과 같은 영역을 공유(스택 영역 + 힙영역 = 일정)
6. Stack 영역
- 지역변수, 매개변수 등이 저장되는 공간
- 함수가 선언되면 할당되고, 끝나면 해제됨
- 할당과 해제를 계속 반복하여 사이즈가 유동적임
- 메모리의 높은 주소에서 낮은 주소로 할당됨(이미지의 아래쪽이 높은 주소)
cf) 오류가 있을 시 댓글로 남겨주세요!
<참고 자료>