프로세스의 주소 공간
Code, Data, BSS, Heap, Stack
코드 (Code / Text)
- 작성한 코드가 기계어 명령으로 변환되어 저장되는 영역
- 이 부분은 컴파일 후에 바뀌지 않으므로 같은 프로그램에서 이 코드 부분을 공유하여 메모리 사용량을 줄이기 위해 존재
데이터 (Data)
- 초기화된 전역 변수, 정적 변수와 배열, 구조체가 존재,
- 프로그램 실행 시 생성, 종료 시 반환,
- 함수 내부 정적 변수는 프로그램 실행 시 공간만 할당하고 함수 실행 시 초기화
BSS (Block Stated Symbol)
- 초기화되지 않은 데이터 저장
힙 (Heap)
- 동적 할당 (malloc, new)된 데이터가 저장, 런타임에 크기가 결정,
- 힙 영역에 할당한 다 쓴 메모리를 반환하지 않으면 메모리가 부족해지는 것을 ‘메모리 누수’
스택 (Stack)
- 임시 메모리 영역으로 지역 변수, 매개 변수, 반환 값 등이 잠시 저장, 함수의 호출이 끝나고 돌아갈 반환 주소, 함수 내의 지역 변수 등이 저장되는 정보를 ‘스택 프레임’이라고 함
- 런타임에 크기가 결정되지만, 런타임에 스택의 총 사이즈를 변경 못함
추가 정보
- 코드,데이터,스텍 영역은 컴파일러가 결정, 힙은 개발자가 결정
- 스택은 상위 메모리부터 할당, 나머지는 하위 메모리부터 할당
오버플로우
- heap overflow : heap이 주소 값을 채우며 내려오다가 stack 영역을 침범
- stack overflow : stack이 밑에서부터 주소 값을 채우며 올라오다가 heap 영역을 침범
Reference
'CS > 운영체제 (OS)' 카테고리의 다른 글
8. IPC (Inter-Process Communication) (0) | 2021.08.11 |
---|---|
7. 프로세스 vs 스레드 (0) | 2021.08.11 |
3. 인터럽트 (Interrupt) (1) | 2021.08.08 |
2. 커널 (Kernel) (0) | 2021.08.06 |
1. 운영체제 (OS) & 부팅과정 (1) | 2021.08.06 |