- 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것
- 각 용도에 맞게 적절한 권한을 부여할 수 있다. (read, write, execute)
실행 가능한 기계 코드가 위치하는 영역
- 읽기, 실행 권한 부여
- 함수 등
컴파일 시점에서 값이 정해진 전역 변수, 전역 상수가 위치하는 영역
- 읽기 권한 부여
- 쓰기 가능한 세그먼트(data 세그먼트)
- 전역 변수(값이 변할 수 있음)
- 쓰기 불가능한 세그먼트(read-only data 세그먼트)
- 전역 상수(값이 변할 수 없음)
int data_num = 31337; // data char data_rwstr[] = "writable_data"; // data const char data_rostr[] = "readonly_data"; // rodata char *str_ptr = "readonly"; // str_ptr은 data, 문자열은 rodata
컴파일 시점에 값이 정해지지 않은 전역 변수가 위치하는 영역
- 읽기, 쓰기 권한 부여
- 프로그램이 시작될 때 모두 0으로 초기화
프로세스의 스택이 위치하는 영역
- 함수의 인자, 지역 변수
- 읽기, 쓰기 권한 부여
- 함수가 호출될 때 스택 프레임이 생성, 반환될 때 해제
- 프로세스를 시작할 때 작은 크기의 스택 프레임이 먼저 할당되고, 부족하면 기존보다 낮은 주소로 확장
힙 데이터가 위치하는 영역
- 동적 할당된 메모리(C의 malloc(), calloc() 등)
- 읽기, 쓰기 권한 부여
- 스택 세그먼트와 반대 방향으로 확장