세그먼트
적재되는 데이터의 용도별로 메모리의 구획을 나눈 것
코드, 데이터, BSS 세그먼트는 바이너리를 구성함
- 코드 세그먼트 (=텍스트 세그먼트) : 실행 가능한 기계 코드가 위치하는 영역
- main() 등의 함수 코드
- 읽기 권한, 실행 권한
- 데이터 세그먼트
- data 세그먼트 : 초기화 된 전역 변수
- rodata 세그먼트 : 전역 상수
- 읽기 권한
char *str_ptr = "readonly";
// str_prt은 data segment
// "readonly" 문자열은 rodata segment
- BSS 세그먼트 (Block Started by Symbol) : 컴파일 시점에 값이 정해지지 않은 전역 변수가 위치
- 초기화되지 않은 전역 변수
- 프로그램이 시작되면 모두 0으로 초기화됨
- 읽기 권한, 쓰기 권한
int bss_data;
int main() {
printf("%d\n", bss_data); // 0
return 0;
}
- 힙 세그먼트 : 스택 세그먼트와 반대 방향으로 자람
- malloc(), calloc() 으로 할당 받은 메모리
- 읽기 권한, 쓰기 권한
- 스택 세그먼트 : 함수의 인자나 지역 변수와 같은 임시 변수들이 실행 중에 여기에 저장됨
- 스택 프레임 : 읽기 권한, 쓰기 권한
- 지역 변수, 함수의 인자
- 호출될 때 생성
- 반환될 때 해제
- 스택 프레임 : 읽기 권한, 쓰기 권한